ホームディレクトリに対して 'rm -r〜'は何をしましたか?


17

geditは、「〜」で終わる非表示のバックアップファイルを作成します。ディレクトリツリーを再帰的にクリーンアップしたかった。

このコマンドrm *~は、「〜」で終わるすべてのローカルファイルを削除します

rm -r *~ .ツリー全体のすべてのファイルを削除すると思っていましたが、タイプミスしましたrm -r ~

いくつかのディレクトリを削除できなかったというメッセージがあり、コマンドを終了しました。質問は次のとおりです。私は何を削除しましたか?

Filezillaの設定がなくなったことに気付きました。このコマンドは、ホームディレクトリからすべての隠しディレクトリを削除しますか?


4
まあ、少なくともバックアップ戦略があります...本当の害はありません。
GUIジャンキー

2
知っておくと良い。私は-rすべてを取り除きたいのでなければ、決して使用しないという方針を持っています。
-ish

3
サイドノートとして、またはにrm -r *~ .一致するすべてのファイルとフォルダー(現在のディレクトリ内)を削除します。(によって無視されるだろう、ほとんどの人が再帰的にカレントディレクトリを削除したくないとして、特別な例外として。最後にすることを、現在のディレクトリ内のすべてのファイルとのdirsを削除しますが、いない現在のディレクトリのサブディレクトリ内のファイルおよびディレクトリ。 )それはあなたが望んでいたものではありません。おそらくフラグとともに使用して、ディレクトリツリーを再帰的に調べ、末尾がである各ファイルを非再帰的に削除したいと思うでしょう。*~..rm*~~find-exec~
エリアケイガン

@EliahKagan、そうだと思いますが、-execで見つけるのはいつも面倒です。ホームディレクトリを復元するのは面倒ですが、:
GUIジャンキー

1
情報:~エスケープせずにキャラクターを歌うと(このよう\~に:)、Bash、ZSHなど(rm基本的にコマンド)がホームディレクトリを意味しているとみなします。
トーマス・ウォード

回答:


31

(ほぼ)すべてのホームディレクトリを削除しました!

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)を使用してプレビューします。 これをまれにしか発生させないようにする必要がありますが、必要な場合は...

    1. find引数なしで、現在のファイル/ディレクトリの下のすべてのファイル/ディレクトリを再帰的にリストします。あなたは、ルックアップしようとする必要がありman find、それは(宝庫)選択的にする方法で、しかし、あなたが気にしたくない場合は、あなただけのお馴染みのを使用することができgrep、削除したいファイルのためのフィルターに。
    2. 私が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


1
find出力を配管するgrepxargs rm危険です。
ゲイラ

2
@izx:追加mv(私のお気に入りのコマンド);)
Takkat

1
少なくともfind、ファイル名にスペース、タブ、改行、"または'文字が含まれている場合に壊れない(および誤ったファイルを削除する可能性がある)安全な方法の使用例を追加します。例find . -name "*example*" -exec rm -v {} +mywiki.wooledge.org/UsingFind
geirha

1
@geirha:なぜfind -deleteそんなに危険なのですか?私はここで何か言ったでしょうが、私が最近見つけたもの以外は知りませんし/、オプションなしのドライランにもかかわらず、-delete私が削除したいファイルがわずかしか見つかりませんでした。-exec rm代わりにお勧めするようです。
Takkat

3
@Takkat -deleteは危険ではなく、の代わりに安全に使用できます-exec rm {} +。私は通常、可能な限り標準のツールと機能を使用することを好みます。-deleteは非標準のGNU拡張であるためfind、Ubuntuでは正常に動作しますが、他のシステムでは動作しない場合があります。
ガイラ

5

はい。別の引数として引用符で囲まれていないチルダ文字は、homedirに展開されます。だから、rm -r ~に拡大しましたrm -r /home/yourusename。したがって、ホームディレクトリ内のすべてのファイルを再帰的に削除するようにrmに指示しました。

チルダ展開の仕組みの詳細については、http://www.gnu.org/software/bash/manual/bashref.html#Tilde-Expansionを参照してください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.