古いフォルダを削除する簡単なスクリプトがあります。問題は、それらを再帰的に削除しないことです。
コマンドは次のとおりです:
find $PWD -maxdepth 5 -mtime +80 | xargs -I{} rm -Rvf {}
ファイルとフォルダは削除されますが、すでに削除されたディレクトリから突然ファイルを削除しようとします。
サーバーは稼働中ですセントOS、そしてフォルダは次のようにマウントされますNFSストレージから。
私たちは何ができる?
答え1
これは、コマンドrm
から見つかったすべてのファイルとディレクトリのリストを受け取るために発生しますfind
。ディレクトリは、リスト内のディレクトリの前にあり、ファイルを再帰的に削除します。
2つの解決策を提案できます:
- 選別再帰的
find
結果:find $PWD -maxdepth 5 -mtime +80 | sort -r | xargs -I{} rm -Rvf {}
-delete
外部ツールの代わりにオプションを使用しますrm
。find $PWD -maxdepth 5 -mtime +80 -delete
更新1 示唆するようにディミタール追加する-type d
と、find はディレクトリのみで動作します。より高速になるかもしれませんが、この場合、$PWD
ディレクトリ内の古いファイルはクリーンアップされません。
find $PWD -maxdepth 5 -mtime +80 -type d | xargs -I{} rm -Rvf {}
更新2示唆するようにエズラ以下がなくても実行できますxargs
:
find $PWD -maxdepth 5 -mtime +80 -exec rm -Rvf {} \;
そして、これが本当に最善の方法だと私は思います。