現在の作業ディレクトリのすべてのコンテンツを削除したいと思います。効率的かつエレガントな方法でそれを行う方法は?
私はいくつかのファイル、ディレクトリを持っています、そしてそれらのいくつかは次のようにドットで始まります:
touch .abc; touch abcd ; mkdir foobar; touch "file name" "#"
このディレクトリを空にするための、posix互換のエレガントなソリューションを探しています。私のアイデアのいくつかを投稿しますが、どれも完璧ではありません。
rm -rf -- * .*
これは移植可能で機能しますが、zsh
を除いて、警告を発行するため、見苦しいです。
rm: cannot remove directory: `.'
rm: cannot remove directory: `..'
これを試して:
find . -maxdepth 1 -not -name \. -exec rm -rf \{\} ;
可能性:
rm -rf -- * .[!.]* ..?*
ファイルのリストが大きすぎると失敗する可能性がありますが、これは失敗しません。
find . ! -name . -Prune -exec rm -rf {} +
zsh
の場合:
rm -rf -- *(D)
私が見つけた最善の解決策は次のとおりです。
find . -delete
ただし、-delete述語は危険であり(manを参照)、私はそれを使用するのが好きではありません。
更新:
-delete
述語は、findのロジックの詳細に精通していない人が使用すると災害を引き起こす可能性があるため、好きではありません。例えば:
find . -delete -name '*.bak' # DO NOT DO IT!!!
誰かがそのような呼び出しで '* .bak'ファイルのみを削除することを期待するかもしれませんが、それはfind . -delete
とまったく同じです。
どうですか
rm -rf * .[a-z]* .[A-Z]* .[0-9]*
それは機能しますか?または、他のファイル名パターンも一致させますか?
別のオプションは、ディレクトリのpwd
、cd ..
、rm -rf
の値を記憶し、ディレクトリを再作成することです。これも多くの理由で醜いです。
ところで、反対票を投じないでください。必要に応じてコメントしてください。
最初にファイルを削除し、次にディレクトリを空にします。
find . -type f -exec rm \{\} \;
find . -depth -type d -empty -exec rmdir \{\} \;