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
ファイルが存在し、読み取り権限が付与されたことを示します。
所有者、グループ、その他に関係なく読み取り可能なファイルを見つけるには、r
lsのファイル権限列でフラグを確認します。
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