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

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

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

答え2

ls -l以下で使用できますgrep

ls -l | grep -e "-r[w-][x-][r-][w-][x-][r-][w-][x-]"

読み取り権限を持つファイルのみが表示されます。パターンの先頭にダッシュの代わりに追加すると、[-d]目次も表示されます。

答え3

あなたはそれを使用することができます、

# for file in /your/path/*; do [ -r "$file" ] && [ -f "$file" ] && printf '%s\n' "$file"; done
  • -rファイルが存在し、読み取り権限が付与されたことを示します。

所有者、グループ、その他に関係なく読み取り可能なファイルを見つけるには、rlsのファイル権限列でフラグを確認します。

ls -l | awk '$1 ~ /r/'

答え4

そしてzsh

view ./*(.^f-444)

または:

view ./*(.r,.A,.R)

1 つ以上の読み取り許可ビットが設定された非表示の一般ファイルが表示されます。以下と同じ:

find . ! -name . -prune ! -name '.*' -type f \(
  -perm -001 -o -perm -010 -o -perm -100 \)

またはGNUを使用してくださいfind

find . -maxdepth 1 ! -name '.*' -type f -perm /444

しかし:

view ./*(.e:'[ -r $REPLY ]':)

隠されていない一般ファイルを表示します。あなた読み取り権限があります。以下と同じ:

find . ! -name . -prune ! -name '.*' -type f -exec test -r {} \; -print

またはGNUを使用してくださいfind

find . -maxdepth 1 ! -name '.*' -type f -readable

そして:

view ./*(.f-7333^f-444)

読み取り権限ビットのみ(1つ以上)設定されている非表示の一般ファイルを表示します。

GNUに対応find:

find . -maxdepth 1 ! -name '.*' -perms /444 ! -perms /7333

関連情報