警告を無視して Find でエラーメッセージを保持する方法

警告を無視して Find でエラーメッセージを保持する方法

コマンドを実行しようとしていますが、findフォルダの設定方法により、スクリプト内で次の警告が複数回表示されます。

find -L ./server/ -type f -printf '%s %p\n' | <rest of really long complicated script>

出力

find: File system loop detected; ‘./server/~andreas/root’ is part of the same file system loop as ‘./’.
find: File system loop detected; ‘./server/~bob/root’ is part of the same file system loop as ‘./’.
find: File system loop detected; ‘./server/~charles/root’ is part of the same file system loop as ‘./’.
...

わかりましたなぜこのメッセージを受け取ります。これらのシンボリックリンクは他のスクリプトで使用するために意図的にここに配置されているので、コンソール出力でこれらの警告を安全に無視したいと思います。

find同様の警告が表示されないようにする方法「ファイルシステムループが検出されました」しかし、まだすべての「本当の」エラーメッセージを保持しますか?

find名前付きのすべてのディレクトリを無視するとは言えませんroot。検索オプションがありますが、-nowarnどこに置いても機能しません。これまで、照会のための「ログレベル」オプションが見つかりませんでした。

答え1

Bashシェルを使用している場合は、出力リダイレクトを使用してstderrをフィルタリングして特定のエラーメッセージを表示しないことがありますgrep

find ... 2> >(grep -v "File system loop detected") | ...

これは、bashのマニュアル/マンページの「プロセスの置き換え」セクションで説明されています。https://www.gnu.org/software/bash/manual/html_node/Process-Substitution.html#Process-Substitution

関連情報