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.*.txt
No 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/
、この方法で任意のログファイルを管理できます。 このアプローチを検討してください。