展開スクリプトの一部として、一時ディレクトリからキャッシュされたものをダンプしたいと思います。私は次のようなコマンドを使用します:
rm /tmp/our_cache/*
ただし、/tmp/our_cache
は空です(多くの変更を連続してテストサーバーにプッシュする場合はかなり一般的です)、次のエラーメッセージが出力されます。
rm: cannot remove `/tmp/our_cache/*': No such file or directory
大したことではありませんが、少し見苦しいので、このスクリプトの出力でノイズと信号の比率を削減したいと思います。
UNIXでディレクトリが既に空であるというメッセージを表示せずにディレクトリの内容を削除する簡潔な方法は何ですか?
おそらくプロンプトを出さずにすべてのファイルを削除したいので、-f
スイッチをrm
に切り替えて、存在しないファイルを無視してみませんか?
rm -f /tmp/our_cache/*
Manページから:
-f, --force
ignore nonexistent files, never Prompt
また、/tmp/our_cache/
にサブディレクトリがあり、それらとその内容も削除する場合は、-r
スイッチを忘れないでください。
find /tmp/our_cache/ -mindepth 1 -delete
編集1
削除された「-type f
編集2
(-mindepth 1
の制限を取り除いた後)検索ルートディレクトリが削除されないようにするために、非標準オプション-type f
を追加しました。
これを印刷しないように、標準エラーを/dev/null
にリダイレクトできます
$ rm /tmp/our_cache/* 2>/dev/null
別の方法(少しやりすぎですが...):
[ ! -z "$(ls -A /tmp/our_cache/)" ] && rm -rf /tmp/our_cache/*
これは、test
または[
を使用して、ディレクトリでls
を実行して返された文字列が空でないかどうかをテストします。次に、その文字列が空でない場合に限り、ディレクトリの下のすべてを削除します。
注:グロブをls
から除外すると、ファイルがないというエラーが抑制されます。