このコマンドを使用して、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