(ほぼ)すべてのホームディレクトリを削除しました!
rm -r something
何かの中/下のファイルとディレクトリを再帰的に削除します。別のユーザーが所有している(例root
)か、使用中(例:GVFSマウント)であるため、削除する権限がない項目でのみ失敗します。
-f
(のようにrm -rf something
)追加しなかった場合、次のような結果が得られます。
rm: remove write-protected regular file ‘something’?
rm: descend into write-protected directory ‘something’?
この時点で中止することができ、間違ったコマンドを実行したことに気付くでしょう。
そのような事故を回避する方法に関するコミュニティからの提案
注:コミュニティwiki、誰でも気軽に貢献してください。
いくつかのファイルについては、-i
オプションを使用して、ファイルまたはディレクトリの削除に関する確認を取得します。
$ rm -ri something/
rm: remove regular file ‘something/file~’? y
rm: descend into directory ‘something’? y
rm: remove regular file ‘something/file’? y
rm: remove directory ‘something’? y
現在のディレクトリから削除する場合は./
、別の場所を誤って削除しないように、接頭辞にa を付けます。
$ cd something
$ rm -v ./*~
removed ‘./file~’
上記はの使用を示すためでした./
。サブディレクトリがある場合は、もちろんrm -v something/*~
同様に使用できます。注意:rm ./.*
現在のディレクトリ内のすべての隠しファイルを削除するとは思わないでください。隠しファイルのグロビングに関する回避策については、このServerfaultの質問を参照してください。
削除ではなく移動:最初にファイルを再帰的に削除するのではなく、最終的に削除する前に他の場所から削除するファイルを移動することに慣れました。何かがうまくいかなかった場合、簡単に復元できます。
mv -b SOURCE DEST
選択したファイルを再帰的に削除するfind
場合は、(場合によってはgrep
)を使用してプレビューします。 これをまれにしか発生させないようにする必要がありますが、必要な場合は...
find
引数なしで、現在のファイル/ディレクトリの下のすべてのファイル/ディレクトリを再帰的にリストします。あなたは、ルックアップしようとする必要がありman find
、それは(宝庫)選択的にする方法で、しかし、あなたが気にしたくない場合は、あなただけのお馴染みのを使用することができgrep
、削除したいファイルのためのフィルターに。
- 私がuber-l33tカーネルハッカーであり、ソースツリーにある数KBの「サンプル」ファイルに悩まされているとします。名前にそれを含むすべてのファイルを削除したい。を入力すると
find | grep example
、これらの20個のファイルが表示されます。 それはよさそうなので、私はこれらの正確なファイルを、rm -v
前述の詳細な出力とともに削除しますxargs
:
見つける| grepの例| xargs rm -v
この出力
が得られます。 このようなプレビューにより、たとえばのsample
代わりにタイプミスをして入力するような問題を防ぐことができますexample
。
スペース、タブ文字、改行、または引用符("
または'
)を含むファイル名がある場合は、上記のソリューションを使用しないでください。xargs
失敗したりrm
、最悪の場合は間違ったファイルを削除してしまう可能性があります。ファイル。上記の安全な方法は、すべてをfind
の演算子とアクションで行うことです。
以下は、単語を含むすべてのファイルを表示します example
find . -name "*example*"
そのリストが削除するファイルである場合、-exec
アクションを使用してファイルをに渡しますrm
。
find . -name "*example*" -exec rm -v {} +
参照検索を使用して使用するとより多くの助けのためにfind
。