Unix では、現在のディレクトリとその下にあるものをすべて削除するにはどうすればよいでしょうか?
-
03-07-2019 - |
質問
これにより、サブディレクトリとその下のすべてが削除されることはわかっています。
rm -rf <subdir-name>
しかし、現在のディレクトリ内のすべてのものとその下のすべてのサブディレクトリ、およびそれらすべてのサブディレクトリの内容をすべて削除するにはどうすればよいでしょうか?
解決
安全なコンピューティングの実践。階層の1レベル上に移動し、ワイルドカード式を使用しないでください。
cd ..; rm -rf -- <dir-to-remove>
2つのダッシュ--
は、ダッシュで始まる場合でも、rm
がコマンドラインオプションではないことを<dir-to-remove>
に伝えます。
他のヒント
現在のファイル/ディレクトリの下にあるすべてのファイル/ディレクトリを削除します。
find -mindepth 1 -delete
同じ名前を別のディレクトリで使用したい場合は、名前を付けることができます
find <name-of-directory> -mindepth 1 -delete
サブディレクトリとそのファイルだけでなく、ディレクトリ自体も削除する場合は、-mindepth 1
を省略します。削除されるもののリストを取得するには、-delete
なしで実行します。
私がいつもしていることはタイプです
rm -rf *
および次にESC- *を押します、bashは*を現在の作業ディレクトリ内のファイルとディレクトリの明示的なリストに展開します。
利点は次のとおりです。
- Enterキーを押す前に、削除するファイルのリストを確認できます。
- コマンド履歴には<!> quot; rm -rf * <!> quot;は含まれません。ワイルドカードはそのままで、間違った場所で間違った時間に誤って再利用される可能性があります。代わりに、コマンド履歴には実際のファイル名が含まれます。
- また、<!> quot;ちょっと待って...どのファイルを削除しただけですか?<!> quot;と答えるのに1、2回便利になりました。ファイル名は、ターミナルスクロールバックバッファーまたはコマンド履歴に表示されます。
実際、私はこれがとても気に入っているので、.bashrcの次の行でTABのデフォルトの動作にしました。
bind TAB:insert-completions
使用
rm -rf *
更新:.
は現在のディレクトリを表しますが、これは使用できません。コマンドには、..
および<=>の明示的なチェックがあるようです。代わりにワイルドカードグロビングを使用してください。しかし、これには危険が伴います。
より安全なバージョンのIMOの使用:
rm -ri *
(すべてのファイル/ディレクトリを削除する前に確認を求められます。)
それは正しいです rm –rf .
サブディレクトリとその内容を含め、現在のディレクトリにあるすべてのものを直接削除します。の シングルドット (.
) は現在のディレクトリを意味します。しないように注意してください rm -rf ..
以来 ダブルドット (..
) は前のディレクトリを意味します。
そうは言っても、あなたが私と同じで、複数のターミナルウィンドウを同時に開いている場合は、安全に使用したほうがよいでしょう。 rm -ir .
その理由を理解するためにコマンド引数を見てみましょう。
まず、これを見てみると、 rm
コマンドのマニュアルページ (man rm
ほとんどの Unix では) –r
「ディレクトリの内容を再帰的に削除する」という意味です。それで、やっています rm -r .
単独では、現在のディレクトリ内のすべてとその下のすべてが削除されます。
で rm –rf .
追加された -f は、「存在しないファイルを無視し、プロンプトを表示しない」ことを意味します。このコマンドは、現在のディレクトリ内のすべてのファイルとディレクトリを削除しますが、本当に削除するかどうかを確認するプロンプトは表示されません。 -f
特権ユーザーでコマンドを実行すると、本当に必要なものであるかどうかを確認する機会が得られずにディレクトリの内容を削除してしまう可能性があるため、特に危険です。
一方、 rm -ri .
の -i
それは -f
「削除する前にプロンプトを表示する」という意味です。これは、「おっと!」と言うチャンスがあることを意味します。それは私が望んでいることではありません」と言う前に、rm は喜んですべてのファイルを削除します。
システム管理者としての初期の頃、私は次のことを行いました。 rm -rf /
完全な権限 (root) でログインしているときにシステム上で実行します。その結果、バックアップからシステムを復元するのに 2 日かかりました。だからこそ私は今雇用している rm -ri
今。
方法:
rm -rf "$(pwd -P)"/*
rm -rf *
しないでください!それは危険です!あなたが正しいディレクトリにいることを確認してください!
正しいディレクトリにいることを確認してください
rm -rf *
この最も単純な安全な<!> amp;一般的な解決策はおそらく:
find -mindepth 1 -maxdepth 1 -print0 | xargs -0 rm -rf
この答えの方が優れていると思います:
https://unix.stackexchange.com / questions / 12593 / how-to-remove-all-the-files-in-a-directory
最上位ディレクトリの名前が
images
の場合、rm -r images/*
を実行します。これは、シェルグロブ演算子*
を使用して、イメージ内のすべてのファイルまたはディレクトリでrm -r
を実行します。
基本的には、1レベル上に移動してから、Xディレクトリ内のすべてを削除すると言います。この方法では、コンテンツを削除するフォルダーを指定しているため、元のフォルダーを保持しながら(ここではすべてを削除する<!> quot;と言うよりも安全です(許可されていない、または単にフォルダの既存の権限を変更したくない)