web-dev-qa-db-ja.com

すでに空の場合、エラーなしでディレクトリ内のファイルを削除します

展開スクリプトの一部として、一時ディレクトリからキャッシュされたものをダンプしたいと思います。私は次のようなコマンドを使用します:

rm /tmp/our_cache/*

ただし、/tmp/our_cacheは空です(多くの変更を連続してテストサーバーにプッシュする場合はかなり一般的です)、次のエラーメッセージが出力されます。

rm: cannot remove `/tmp/our_cache/*': No such file or directory

大したことではありませんが、少し見苦しいので、このスクリプトの出力でノイズと信号の比率を削減したいと思います。

UNIXでディレクトリが既に空であるというメッセージを表示せずにディレクトリの内容を削除する簡潔な方法は何ですか?

34
Mark Amery

おそらくプロンプトを出さずにすべてのファイルを削除したいので、-fスイッチをrmに切り替えて、存在しないファイルを無視してみませんか?

rm -f /tmp/our_cache/*

Manページから:

-f, --force
          ignore nonexistent files, never Prompt

また、/tmp/our_cache/にサブディレクトリがあり、それらとその内容も削除する場合は、-rスイッチを忘れないでください。

53
depquid
find /tmp/our_cache/ -mindepth 1 -delete

編集1

削除された「-type f

編集2

-mindepth 1の制限を取り除いた後)検索ルートディレクトリが削除されないようにするために、非標準オプション-type fを追加しました。

6
Hauke Laging

これを印刷しないように、標準エラーを/dev/nullにリダイレクトできます

$  rm /tmp/our_cache/* 2>/dev/null
3
pradeepchhetri

別の方法(少しやりすぎですが...):

[ ! -z "$(ls -A /tmp/our_cache/)" ] && rm -rf /tmp/our_cache/*

これは、testまたは[を使用して、ディレクトリでlsを実行して返された文字列が空でないかどうかをテストします。次に、その文字列が空でない場合に限り、ディレクトリの下のすべてを削除します。

注:グロブをlsから除外すると、ファイルがないというエラーが抑制されます。

1
h3rrmiller