もしもrmコマンドがファイルを消さない世界だったら
幸せな世界なんじゃないでしょうか。エンジニアならば誰しもが一度はrm
コマンドでうっかりファイルを消去してしまったという経験がお有りかと思います。気をつけていても忘れた頃にやってしまうあのミス。バックアップやスナップショットを取っていたり、特殊な条件下なら復旧も可能ですが残念ながらそうでない場合も多いです。2回目ともなればもはや諦めがつきダメージが少ないかもしれません。
そもそもこんなに手軽にファイルを消去出来てしまうなんて冷静に考えたらおかしいことではないでしょうか。WindowsやMacにはゴミ箱というセーフティネットがあるのにも関わらず、どうして昔からLinuxにはゴミ箱が搭載されないのか。
そんな事を考えながらふと思ったのですが、無いなら作れば良いんじゃないでしょうか。ゴミ箱を。
rmコマンドを変える
rm
コマンドのエイリアスを作成することで、rm
コマンド本来の処理をオーバーライドしてしまいます。まずは次のようなシェルスクリプトを書いて下さい。
#!/bin/bash
TIMESTAMP=`date +%Y%m%d_%H%M%S`
tar zcvf ${TIMESTAMP}".tar.gz" $@
mv ${TIMESTAMP}".tar.gz" /tmp
rm $@
ディスク使用量を軽減するために対象のファイルを圧縮した後、/tmp
ディレクトリに移動しています。/tmp
ディレクトリに置いておくとアクセスが無かったファイルは3日間周期でcronに削除されます。この周期はOSのディストリビューションに依って異なるのですが、大抵のディストリビューションで/tmp
配下のファイルは定期的に削除されます。
次にrm
コマンドが上のシェルスクリプトを実行するようにエイリアスを登録します。
$ alias rm='./trush.sh'
この状態で適当なファイルをカレントディレクトリに作成して、そのファイルを対象にrm
コマンドを実行して下さい。/tmp
ディレクトリ内に圧縮されたファイルが置かれていれば成功です。
終わりに
この試作スクリプトは現時点ではかなり荒削りな状態です。パスを通していないのでシェルスクリプトのあるディレクトリでしか使えないし、他のスクリプト内での使用も考えられていません。ご自身の環境で使いたい場合はブラッシュアップしてお使い頂ければと思います。ご容赦下さい。