
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ファイルに含まれています。