rmコマンドでファイルを消さなければいいのでは?

もしも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ディレクトリ内に圧縮されたファイルが置かれていれば成功です。

終わりに

この試作スクリプトは現時点ではかなり荒削りな状態です。パスを通していないのでシェルスクリプトのあるディレクトリでしか使えないし、他のスクリプト内での使用も考えられていません。ご自身の環境で使いたい場合はブラッシュアップしてお使い頂ければと思います。ご容赦下さい。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA