web-dev-qa-db-ja.com

Unixでは、現在のディレクトリとその下のすべてをどのように削除しますか?

これにより、サブディレクトリとその下のすべてが削除されることを知っています。

rm -rf <subdir-name>

しかし、現在のディレクトリ内のすべてのものと、その下のすべてのサブディレクトリ、およびそれらすべてのサブディレクトリの内容をどのように削除しますか?

107
Yen

安全なコンピューティングを実践します。階層を1レベル上に移動し、ワイルドカード式を使用しないでください。

cd ..; rm -rf -- <dir-to-remove>

2つのダッシュ--は、<dir-to-remove>がダッシュで始まる場合でも、コマンドラインオプションではないことをrmに伝えます。

165
tvanfosson

現在のファイル/ディレクトリの下にあるすべてのファイル/ディレクトリを削除します。

find -mindepth 1 -delete

あなたが持っている別のディレクトリで同じことをしたい場合は、単に名前を付けることができます

find <name-of-directory> -mindepth 1 -delete

サブディレクトリとそのファイルだけでなく、ディレクトリ自体も削除する場合は、-mindepth 1を省略します。削除されるもののリストを取得するには、-deleteなしで実行します。

私がいつもしているのはタイプ

rm -rf *

その後、ESC- *を押します。bashは、*を現在の作業ディレクトリ内のファイルとディレクトリの明示的なリストに展開します。

利点は次のとおりです。

  • Enterキーを押す前に、削除するファイルのリストを確認できます。
  • コマンド履歴には、ワイルドカードをそのまま使用した「rm -rf *」が含まれず、誤った場所で間違った場所で誤って再利用される可能性があります。代わりに、コマンド履歴には実際のファイル名が含まれます。
  • また、「ちょっと待って...どのファイルを削除しただけですか?」と答えるのに1、2回便利になりました。ファイル名は、端末のスクロールバックバッファーまたはコマンド履歴に表示されます。

実際、私はこれがとても好きなので、.bashrcの次の行を使用して、TABのデフォルトの動作にしました。

bind TAB:insert-completions
40
Ville Laurikari

つかいます

rm -rf *

更新:.は現在のディレクトリを表しますが、これは使用できません。このコマンドには、.および..の明示的なチェックがあるようです。代わりにワイルドカードグロビングを使用してください。しかし、これにはリスクが伴います。

より安全なバージョンのIMOは次のものを使用することです:

rm -ri * 

(すべてのファイル/ディレクトリを削除する前に確認を求められます。)

21
dirkgently

rm –rf .は、サブディレクトリとそのコンテンツを含む現在のすべてを直接削除します。 単一のドット.)は現在のディレクトリを意味します。 二重ドットrm -rf ..)は前のディレクトリを意味するため、..を実行しないように注意してください。

これは、あなたが私のようであり、複数のターミナルウィンドウを同時に開いている場合は、安全で、rm -ir .を使用する方が良いでしょう。コマンド引数を見て理由を理解しましょう。

まず、 rmコマンドのmanページ (ほとんどのUnixではman rm)を見ると、–rは「ディレクトリの内容を再帰的に削除する」ことを意味していることに気づきます。したがって、rm -r .を単独で実行すると、現在のディレクトリとその下のすべてが削除されます。

rm –rf .で追加された-fは、「存在しないファイルを無視し、プロンプトを表示しない」ことを意味します。このコマンドは、現在のディレクトリ内のすべてのファイルとディレクトリを削除し、本当にそれを行うかどうかを確認するプロンプトを表示しません。 -fは、特権ユーザーの下でコマンドを実行する場合に特に危険です。これは、ディレクトリの内容を削除することができます。

一方、rm -ri .では、-iを置き換える-fは、「削除前にプロンプ​​トを出す」ことを意味します。これは、rmがすべてのファイルを正常に削除する前に、「おっと、私が望んでいるものではない」と言う機会を得るということです。

私の初期のシステム管理者時代には、完全な特権(root)でログインしている間にシステムでrm -rf /を実行しました。その結果、バックアップからシステムを復元するのに2日かかりました。だからこそ、今rm -riを採用しています。

6
rm  -rf * 

しないでください!それは危険です!あなたが正しいディレクトリにいることを確認してください!

5
nkassis

どうですか:

rm -rf "$(pwd -P)"/* 
5
jon

make sure正しいディレクトリにいます

 rm -rf * 
4
digitaljoel

この最も簡単で安全な一般的なソリューションは、おそらく次のとおりです。

find -mindepth 1 -maxdepth 1 -print0 | xargs -0 rm -rf
2
mark

私はこの答えが良いと信じています:

https://unix.stackexchange.com/questions/12593/how-to-remove-all-the-files-in-a-directory

最上位ディレクトリの名前がimagesの場合、rm -r images/*を実行します。これは、シェルglob演算子*を使用して、イメージ内のすべてのファイルまたはディレクトリでrm -rを実行します。

基本的には1レベル上に移動してから、Xディレクトリ内のすべてを削除すると言います。この方法では、元のフォルダーを保持しながら、コンテンツを削除するフォルダーを指定するだけで、「ここですべてを削除する」よりも安全です(許可されていない、または単にしたくないためにしたいことがありますフォルダーの既存のアクセス許可を変更するには)

1