デフォルトでは、findから「アクセス拒否」stderrを削除します。

デフォルトでは、findから「アクセス拒否」stderrを削除します。

findアクセス権のないディレクトリにアクセスしようとしたときに表示されるエラーメッセージを抑制するオプションはありますか?

私はstderrを削除できることを知っていますが、ドキュメントにオプションが見つかりませんでしたが、これを行うオプションが存在しないと信じるほど明らかな必要性のようです。

答え1

到着避ける許可エラーが発生した場合は、findこれらのエラーが発生しないようにしてください。アクセスできないディレクトリを入力しないことでこれを行うことができます。

find現在、ユーザーが読み取ることはできませんがGNUスタイルに深く入らないディレクトリのパス名を見つけて表示します。

find / -type d ! -readable -prune

これ-pruneにより、検索パスから現在調査中のパス名が削除されますfind

標準では、find複雑な方法を組み合わせて、ディレクトリ所有権に基づいて各ディレクトリの権限をテストする必要があります。何度試してみたようですが難しいですね。-perm-user-group

「その他」権限ビットのみを考慮してください。

find / -type d ! -user "$(id -u)" ! -group "$(id -g)" ! -perm -005 -prune

現在のユーザーに属しておらず、現在のユーザーのグループに属しておらず、「他人」が読んだり(表示したり)実行(入力)したりすることを許可しない権限を持つディレクトリを見つけて、そのディレクトリを削除します。検索パスから。

すべての許可ビットをテストする完全なものは次のとおりです。

find / -type d \( \(   -user "$(id -u)"                     ! -perm -500 \) -o \
                  \( ! -user "$(id -u)"   -group "$(id -g)" ! -perm -050 \) -o \
                  \( ! -user "$(id -u)" ! -group "$(id -g)" ! -perm -005 \) \) -prune

-readableこれは、ACLなども考慮されるfind点でGNUとは異なります。-readable


到着捨てるの許可エラーはfind標準エラーストリームにリダイレクトします/dev/null

答え2

エラーメッセージを表示しないオプションがあるコマンドはほとんど見つかりません。捨てることが些細なものだからだ。標準エラーと同じ構造を使用してください2>/dev/null

特にfindそのようなオプション自体はありません。

関連情報