読み取り権限のみを持つ現在の作業ディレクトリのファイルを表示するには?

読み取り権限のみを持つ現在の作業ディレクトリのファイルを表示するには?

findコマンドを知っている人なら、この質問は簡単に思えるかもしれません。しかし、findコマンドが私のシステムでは機能しないとしましょう。 「find」コマンドを使用せずに権限に従ってファイルを表示するにはどうすればよいですか?

ベストアンサー1

そうでない場合は、findまだシェル(ワイルドカードを拡張できます)があり、ディレクトリの内容を繰り返して、最初に各ファイルがファイルであることを確認し、書き込み可能でないことを確認し、実行可能でないことを確認してから、次を確認できます。実行可能な読み取りです。

誰かがデモンストレーションのためにスクリプトを書くこともできますが、文書を読むことから始めるのは役に立ちます。POSIXテスト

ところで、「ただ「質問のタイトルに書き込み可能または実行可能ファイルを除外します。」POSIXfind、次のように表現できます。

find . -type f \! \( -perm -u=w -o -perm -u=x -o -perm -g=w -o -perm -g=x -o -perm -o=w -o -perm -o=x \)

牛に似た一種の栄養findより簡潔な表現を可能にする拡張が提供される。

find . -type f \! -perm /u=wx,g=wx,o=wx 

このtestユーティリティ([およびより一般的に使用される)は、たとえば次の]ような簡単なテストを提供します。find

for name in *; do [ -f "$name" -a -r "$name" -a ! -w "$name" -a ! -x "$name" ] && ls -l "$name"; done

ただし、その権限は次にのみ適用されます。ユーザー、いいえグループまたはその他。これに基づいてファイルを除外するには、次のものを使用できますls

for name in *; do [ -f "$name" ] && case "$(ls -l "$name")" in -r--r--r--*) echo "$name";; esac; done

または (実行ファイルを許可する場合)

for name in *; do [ -f "$name" ] && case "$(ls -l "$name")" in -r-?r-?r-*) echo "$name";; esac; done

おすすめ記事