find が権限に対して不平を言うルートを除外

find が権限に対して不平を言うルートを除外

ディスクボリュームからファイルのリストを作成する必要があります。一部のディレクトリ(ルートの下にあるすべての隠しディレクトリ)には奇妙な権限があり、findでエラーが発生します。

これらすべてのパスを除外しようとしましたが、1つのディレクトリでまだ文句を言います。

find . -type f -not -path './.*/*'
find: ./.DocumentRevisions-V100: Permission denied

権限はこうです(OSで設定するものなのでむやみにしてはいけないと思います)。

d--x--x--x root  wheel   .DocumentRevisions-V100

find文句を避けるために、すべての隠しディレクトリを効果的に省略するように文をどのように変更できますか? (2>/dev/null他の質問について知りたいのと同じようにしたくありません。)

答え1

-readableGNU findまたはand述語をサポートする別の検索を使用してください-executable

find . -type d ! \( -readable -executable \) -prune -o -type f -not -path './.*/*' -print

まず、閲覧できないディレクトリをクリーンアップします。その条件が適用されない場合は、別の条件を試してください。

これらのオプションがない場合は、findファイル権限を一致させることができます。

find . -type d ! -perm -u+rx -prune -o -type f ! -path './.*/*' -print

答え2

find構文は本当に奇妙な獣です。私の考えでは、あなたは成功するかもしれないと思います。

find . -path './.*' -prune -o -type f -print

~によると(1) マニュアルページを探す:

ディレクトリツリー全体を無視するには、ツリー内のすべてのファイルを確認する代わりに-pruneを使用します。たとえば、src / emacsディレクトリとその下のすべてのファイルとディレクトリをスキップして、見つかった他のファイルの名前を印刷するには、次の手順を実行します。

find . -path ./src/emacs -prune -o -print

答え3

u='-user "$USER"'
g='\('$(IFS=\ ;printf " -group %d " $(id -G))'\)'
eval "find / $u \( -perm -u=rx -o -prune \) -o \
             $g \( -perm -g=rx -o -prune \) -o \
                   -perm -o=rx -o -prune" | wc -l

これはうまくいきます。ファイル権限は常に可能な最も具体的なレベルで評価されるため、-o心配する必要はありません。またたくさん。ファイルがユーザーの所有であり、他の人とグループが読み取り可能であるが所有者がファイルを読み取ることができない場合、ユーザーはそのファイルを読み取ることができません。したがって、最も具体的な権限の一致から始めて-pruningそこまで作業するだけです。


find: `/proc/3379/task/3379/fd/5': No such file or directory
find: `/proc/3379/task/3379/fd/5': No such file or directory
find: `/proc/3379/task/3379/fd/5': No such file or directory
find: `/proc/3379/task/3379/fd/5': No such file or directory
find: `/proc/3379/task/3379/fdinfo/5': No such file or directory
find: `/proc/3379/task/3379/fdinfo/5': No such file or directory
find: `/proc/3379/task/3379/fdinfo/5': No such file or directory
find: `/proc/3379/task/3379/fdinfo/5': No such file or directory
find: `/proc/3379/fd/5': No such file or directory
find: `/proc/3379/fd/5': No such file or directory
find: `/proc/3379/fd/5': No such file or directory
find: `/proc/3379/fd/5': No such file or directory
find: `/proc/3379/fdinfo/5': No such file or directory
find: `/proc/3379/fdinfo/5': No such file or directory
find: `/proc/3379/fdinfo/5': No such file or directory
find: `/proc/3379/fdinfo/5': No such file or directory
327652

ご覧のとおり、権限の問題はいつでも発生せず、時折発生する競合問題があります。/procこれは、ファイルを読み取るときに避けられない問題です。

関連情報