find および rm コマンドが再帰的に削除されない

find および rm コマンドが再帰的に削除されない

古いフォルダを削除する簡単なスクリプトがあります。問題は、それらを再帰的に削除しないことです。

コマンドは次のとおりです:

find $PWD -maxdepth 5 -mtime +80 | xargs -I{} rm -Rvf {}

ファイルとフォルダは削除されますが、すでに削除されたディレクトリから突然ファイルを削除しようとします。

サーバーは稼働中ですセントOS、そしてフォルダは次のようにマウントされますNFSストレージから。

私たちは何ができる?

答え1

これは、コマンドrmから見つかったすべてのファイルとディレクトリのリストを受け取るために発生しますfind。ディレクトリは、リスト内のディレクトリの前にあり、ファイルを再帰的に削除します。

2つの解決策を提案できます:

  1. 選別再帰的 find結果:find $PWD -maxdepth 5 -mtime +80 | sort -r | xargs -I{} rm -Rvf {}
  2. -delete外部ツールの代わりにオプションを使用しますrmfind $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 {} \;

そして、これが本当に最善の方法だと私は思います。

関連情報