「find」コマンドで特定のエラー メッセージを抑制するにはどうすればよいですか?

「find」コマンドで特定のエラー メッセージを抑制するにはどうすればよいですか?

find /var/log/myfile.*.txt -type f

そのパターンに一致するファイルが存在しない場合は、次のようなエラー ログが表示されますNo such file or directory

質問: このエラー メッセージだけを防ぐにはどうしたらよいでしょうか。もちろん、2>/dev/null最後に を追加することもできますが、そうするとすべてのエラーが抑制されます。記載されているエラーだけを無視するにはどうしたらよいでしょうか。

定期的にいくつかのファイルを削除し、ファイルが存在しない場合は常にエラーをログに記録する cronjob があるためです。

@daily find /var/log/myfile.*.txt -mtime +7 -delete

答え1

この場合、このメッセージをまったくトリガーしないことが適切です。

これをシェルで実行すると

find /var/log/myfile.*.txt -type f

/var/log/myfile.*.txtシェルによって展開されます。一致するものがない場合、find展開されたオブジェクトまたはリテラルを取得します。後者の場合は がトリガーされます。/var/log/myfile.*.txtNo such file or directory

まずダミーファイルを作成します: touch '/var/log/myfile.dummy_name.txt'(比較カイロの象)。ただし、この「解決策」は、実際にはエレガントではありません。

より良い解決策は、findパターンを処理することです。

find /var/log/ -type f -name "myfile.*.txt"

二重引用符はシェル内でのグロブを防止します(比較これ)。この場合、 はそのようなパターンをサポートしているため、 自体*によって処理されます。find-name

しかし、上記のアプローチmyfile.*.txtは、任意のサブディレクトリも同様/var/log/です。 をfindサポートしている場合は-maxdepth、それを使用します。

find /var/log/ -maxdepth 1 -type f -name "myfile.*.txt"

そうでない場合は、こちらを参照してください:POSIX 検索を特定の深さに制限しますか?


おそらく、OS では既にlogrotate(8)ログファイルの管理に が使用されています。

私の Debian では、logrotateのため毎日実行しています/etc/cron.daily/logrotate。Ubuntu でも同様のはずです。 でカスタム設定を作成し/etc/logrotate.d/、この方法で任意のログファイルを管理できます。 このアプローチを検討してください。

関連情報