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


108

私はこれがサブディレクトリとその下のすべてを削除することを知っています:

rm -rf <subdir-name>

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


2
これは、だまされやすい人である必要があります:stackoverflow.com/questions/550922/...
jmucchiello

回答:


166

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

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

2つのダッシュは、ダッシュで始まっていても、それがコマンドラインオプションではない--ことをrm示し<dir-to-remove>ています。


8
なぜこれがより安全なのですか?

34
名前付きディレクトリを具体的に照合しているため、削除するつもりのないものを削除する可能性が低いからです。
tvanfosson 09年

5
そうだね。私はそれをかなり簡単に実行している自分を見ることができました。

26
ディレクトリ自体も削除しませんか?後でmkdir <dir-to-remove>を実行する必要があります。ただし、そのディレクトリを参照するハードリンクは、後で別のディレクトリになります。
ヨハネスシャウブ-litb 2009年

5
@円、あなたが使用するrm ./場合、あなたは誤ってタイプするかもしれません、rm . /それは災害であるかもしれません。
irfandar

44

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

find -mindepth 1 -delete

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

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

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


サブディレクトリ内のすべてのファイルを削除する必要がありましたが、サブディレクトリ自体を削除したくありませんでした。<name-of-direcotry>を見つけます-mindepth 2 -deleteはうまくいきました!
Tim Dearborn 2013年

-mindepth 1ディレクトリ(find <name-of-directory> -mindepth 1 -delete)を指定する場合に必要です。それ以外の場合、Johannesは正しいfind -deleteです。現在の作業ディレクトリは削除されません(を使用する場合)。
Weboide 2013

IMO、これは特にスクリプトでの最良の答えです。
wizonesolutions 2015

1
私が試した: find -mindepth 1 -deleteしかし、私は得た illegal option -- mが、私はmindepthオプション取り除いたとき、それは素晴らしい仕事 find . -delete
シャロンを

41

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

rm -rf *

そしてその後、ESC- *をヒットし、bashは、現在の作業ディレクトリ内のファイルおよびディレクトリの明示的なリストに*を拡大していきます。

利点は次のとおりです。

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

実際、私はこれが大好きなので、.bashrcの次の行でTABのデフォルトの動作にしています。

bind TAB:insert-completions

行方不明--この回答に?このアプローチは私が言わなければならない全体的に素晴らしいです。
Ben Voigt 2014年

これをsudoで実行するより良い方法
Abbas Torabi

22

使用する

rm -rf *

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

より安全なバージョンのIMOは次のものを使用します。

rm -ri * 

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


13
「リスクを冒すことはできます」は驚くほど簡潔です。

5
このようなことをしているとき、私は簡単なls -rを見つけました。まず、何を削除するかを確認できます。ディスク全体を削除するつもりはないという簡単なアイデアを与えるのに役立ちます...
リッチブラッドショー

2
なぜrm -rf <subdir-name>よりも危険なのですか?

2
@円-間違った場所で行うと、悲惨な結果が得られる可能性があるためです。間違った場所で特定の名前を使用しても、同じサブディレクトリが偶然そこに存在する場合にのみ、問題が発生する可能性があります。
tvanfosson 2009年

1
子がいる間に親を削除することはできません。
2009年

6

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

つまり、私と同じように複数のターミナルウィンドウを同時に開いている場合は、安全rm -ir .で、コマンドの引数を見て理由を理解することをお勧めします。

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

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

otherhandで、中に置き換えられている「任意の除去前のプロンプト」の手段を。これは、rmがすべてのファイルを喜んで削除する前に、「oups!それは私が望むものではない」と言う機会を得ることを意味します。rm -ri .-i-f

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


6

どうですか:

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

27
jQueryは非常に強力です。
Pawel 2013

5
rm  -rf * 

やめろ!危ない!あなたが正しいディレクトリにいることを確認してください!


4

正しいディレクトリにいることを確認してください

rm -rf *

2
名前がピリオドで始まるファイルやサブディレクトリは削除されません。

1
本当。私のテストでは、rm -rfも行いません。tvanfossonは、彼の "cd ..; rm -rf <dir-to-remove>"を使用してIMOの最良のソリューションを持っています
digitaljoel 2009年

2

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

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

1

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

/unix/12593/how-to-remove-all-the-files-in-a-directory

トップレベルのディレクトリが呼び出された場合はimages、を実行しrm -r images/*ます。これは、シェルglob演算子*を使用して、rm -rイメージ内のすべてのファイルまたはディレクトリで実行されます。

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

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