find を使用してディレクトリを削除すると、「該当するファイルまたはディレクトリがありません」というメッセージが表示されます。

find を使用してディレクトリを削除すると、「該当するファイルまたはディレクトリがありません」というメッセージが表示されます。

私はAmazon Linuxを使用しています。ディレクトリ内のファイルを削除するように設計されたこのような文があります。

/bin/find $JBOSS_HOME/standalone/tmp/vfs -mindepth 1 -mmin +1441 -exec rm -rf {} \;

しかし、これにより、次のような声明がたくさん発生します。

/bin/find: `/usr/java/jboss/standalone/tmp/vfs/deployment2b6836209f40596a': No such file or directory
/bin/find: `/usr/java/jboss/standalone/tmp/vfs/deployment1fae3ca49edb3384': No such file or directory
/bin/find: `/usr/java/jboss/standalone/tmp/vfs/deploymenta2b0c99bfdd7f444': No such file or directory
...

私のステートメントで存在しないファイルを検索しないようにするか、少なくともこれらのエラーをすべて削除する方法はありますか?

答え1

コマンドは、最近一部のファイルが変更された場合でも、1 日間変更されていないディレクトリを削除します。

これがあなたが望むものであると仮定すると、スティーブン・チャジェラスそしてトリガーコメントには2つの解決策が提案されている。あなたが直面している問題は、findディレクトリを削除するように指示し、ディレクトリに移動してその中に一致するファイルがあるかどうかを確認しようとしていることです。

  • 渡すと、-depthディレクトリfindの内容が最初に処理され、ディレクトリ自体が最後に処理されます。これは、後で削除されるディレクトリの内容を分析するのに時間を無駄にします。

    find $JBOSS_HOME/standalone/tmp/vfs -depth -mindepth 1 -mmin +1441 -exec rm -rf {} \;
    
  • 削除されたディレクトリに移動しないことを-prune示すために使用されます。find

    find $JBOSS_HOME/standalone/tmp/vfs -mindepth 1 -mmin +1441 -exec rm -rf {} \; -prune
    

古いファイルだけを削除したい場合はfind教えてください。-delete電話の代わりに使用することができますrm

find $JBOSS_HOME/standalone/tmp/vfs -mmin +1441 -type f -delete

その後、空のディレクトリを削除できます。

find -depth $JBOSS_HOME/standalone/tmp/vfs -type d -empty -delete

または、2つを組み合わせて削除する必要があるファイルを削除してから、ディレクトリを削除します。

find $JBOSS_HOME/standalone/tmp/vfs -depth -mindepth 1 -mmin +1441 -type f -delete -o -type d -empty -delete

関連情報