私たちのWebサーバーはもともと他の会社によって維持されていました。彼らはキャッシュファイルをクリーンアップするための短いスクリプトを書いた。そのファイルには次のような数行があります。
/usr/bin/find /var/www/cache/blah/ |xargs /bin/rm -f >/dev/null 2>&1
ただ書けない理由がありますか?
/bin/rm -f /var/www/cache/blah/*
ファイルを削除?特定の標準が必要なときに使用していることがわかりますが、find
この場合は見つからないようです。
ベストアンサー1
find
+を使用する理由を考えてみましょうxargs
。
キャッシュされたファイルが多すぎる場合を処理します。これは
rm
、1つのコマンドのみを実行するとエラーになります。ワイルドカードは
*
隠しファイルを拡張しません。再帰的に作業します。
ただし、このfind
+はxargs
フィルタを追加しないとfind
結果にディレクトリとファイルが含まれているため効率的ではありません。ディレクトリで実行すると/bin/rm -f
エラーが発生し、その場所はにリダイレクトされますstderr
。stdout
名前/dev/null
に特殊文字を含むファイルに対してもコマンドは失敗します。
改善されたソリューションは次のとおりです。
find /var/www/cache/blah -type f -exec rm -f -- {} +
find
POSIXlyですべての作業を実行し、フォークを最小限に抑えることがより効率的ですrm
。