ディレクトリを「rm -rf」に免疫するようにします。

ディレクトリを「rm -rf」に免疫するようにします。

rm -rf B私はBフォルダのAフォルダの一部のデータを失いました。私が何をしたのかを理解する前に、すべてのことは終わりました。これで教訓が得られたので、次のようなことをして自殺の衝動を感じるときを避けるために、私のフォルダのいくつかを愚かなものにすることを願っています。

私が考えることができる1つの方法は、bash関数を作成してエイリアスを指定することですrm。この関数は、すべてのサブフォルダで隠されたファイルを探します(たとえば、.dontdeleteこのフォルダに書き込みを続けるプロセスがあるため、書き込み禁止を設定できません。より良い方法はありますか?

答え1

お客様の問題を調査する際に、将来的に役立つ可能性があるこの技術を発見しました。

明らかに、次のようにディレクトリ内のファイルをタッチできます。

touch -- -i

rm -fr *存在するディレクトリからコマンドを実行すると、インタラクティブな-iプロンプトが表示されますrm

$ ls
file1  file2  file3  file4  file5  -i

$ rm -fr *
rm: remove regular empty file `file1'? n
rm: remove regular empty file `file2'? n
rm: remove regular empty file `file3'? n
rm: remove regular empty file `file4'? n
rm: remove regular empty file `file5'? n

rm同じ効果を得るには、常に実行されるようにエイリアスを維持してくださいrm -i。これは迷惑かもしれません。私がよく見たことは、このエイリアスを最初に設定してから、本当に削除するかどうかを尋ねるメッセージを表示せずに無効にすることです。

alias rm='rm -i'

これで、ディレクトリに次の内容が表示されます。

$ ls
file1  file2  file3  file4  file5

$ rm -r *
rm: remove regular empty file `file1'?

エイリアスをオーバーライドするには:

$ \rm -r *

しかし、これはまだ止められませんでしたrm -fr。しかし、それはある程度の保護を提供します。

引用する

答え2

さまざまな可能性:

  • alias rm='rm -i'- rmは尋ねます - 指定しない限り-f...
  • chmod -w dir- このディレクトリのファイルを直接保護します。
  • chattr +i真面目なら
  • rmの周りに独自のラッパーを作成します。
  • など...

しかし、より良いアプローチは、良いバックアップを作成し、重要なデータをある種のバージョン管理(たとえばgit)に維持することです。これは他の多くの利点も提供します。

答え3

バージョン管理ソフトウェアを使用してgitプロジェクトをパッケージ化します。

プロジェクト全体を削除しない限り、ディレクトリをrm -rf .*削除し.gitてロールバックに必要なすべてのデータを失うようにするには、意図的に入力する必要があります。

これには、githubやbitbucketなどのリモートサーバーにバックアップをプッシュできるという利点があります。

答え4

これを簡単にするためにスクリプトを作成しました。ルートパスワードを要求せずに、指定されたフォルダリストの読み取り/書き込み権限とchattrフラグを対話的に変更するシェルスクリプト。以下のリンクからzipファイルをダウンロードできます。

https://drive.google.com/file/d/0B_3UYBZy2FVsMVpBSWdSWnFBYk0/edit?usp=sharing

また、より簡単に設定できるようにインストールスクリプトも含めました。指示はzipファイルに含まれています。

関連情報