ディスクボリュームからファイルのリストを作成する必要があります。一部のディレクトリ(ルートの下にあるすべての隠しディレクトリ)には奇妙な権限があり、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
-readable
GNU 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
これは、ファイルを読み取るときに避けられない問題です。