「find」コマンドの終了状態に対する「ファイルシステムサイクル検出」警告の影響を抑制する方法は?

「find」コマンドの終了状態に対する「ファイルシステムサイクル検出」警告の影響を抑制する方法は?

このコマンドを使用して、find解決する必要があるいくつかのシンボリックリンクを含むディレクトリツリーで、特定の時間(分)より古いすべての一般ファイルを見つけます。

find -L . -type f -mmin +300 -print

ただし、このディレクトリツリーには循環シンボリックリンクがいくつかあり、find次のエラーが発生します。

/usr/bin/find: File system loop detected; ‘/storage/tester1/data/webdav’ is part of the same file system loop as ‘/storage/tester1/data’

ディレクトリ構造からこのループを削除できず、キーの使用を避けることはできません。ただし、エラーを検出-Lするための正しい終了コードを取得するには、このエラーを抑制する必要があります。find本物考えられるエラー(代わりに「ループが検出されました」警告する)。
リダイレクト特別なエラー 2>/dev/nullまだ終了ステータスが表示されるので、何もできません。1このループにより、どの検索でも何も検出されません。本物私のスクリプトから検索中にエラーが発生しました。

どのように避けて終了ステータスを取得できますか?0シンボリックリンクループを使用してディレクトリツリーで検索が成功しましたか?

注:このサイトに「ループが検出されました」に関するいくつかの同様の質問があることを知っていますが、次のシンボリックリンクを削除するとすべての質問を解決できるため(私の場合は不可能です)、この質問は重複しません。閉じないでください!

ベストアンサー1

コメントするほど評判が悪いです。

findの出力を取得し、逆方向一致のためにgrepを使用(-v)して、「ファイルシステムサイクルが検出されました」を含む項目を除外できます。

find / -type d -name bar 2>&1 | grep -v "File system loop detected"

一例:

cd /usr
find . -type d -name bar 2>&1

./share/locale/bar

探しているもの: './share/polkit-1/rules.d':権限が拒否されました。

echo $?

1

find . -type d -name bar 2>&1 | grep -v "Permission denied"

./share/locale/bar

echo $?

0

おすすめ記事