
私は現在、ディレクトリと誰でも(所有者、グループ、その他)が実行できるサブディレクトリのファイルのリストを表示するために考えることができるすべての選択肢を探しています。
あるいは、findコマンドを使用しないことを意味します。
find -L . -type f -perm -111
find -L . -type f -perm -a=x
私が見たいアプローチの1つはlsとgrepの組み合わせです。
答え1
ls
出力を安定して後処理できないことが多いです。
ファイル名に改行文字が含まれていないことを保証できる場合は、次のようにします。
ls -AlLR ./| grep -E '^-(..[[:lower:]]){3}'
これは(通常のファイルのみ)で始まる印刷行であり、権限フィールドの各3文字セットの3番目の文字は小文字です(実際には通常またはまたはです-
。一部のシステムには拡張子がありますが、ファイルの場合は実行可能な場合は小文字です。作りなさい)。x
s
l
t
フルパスではなくファイル名のみが印刷されます。
を使用すると、zsh
次の操作も実行できます。
printf '%s\n' **/*(D-.f+111)
または:
printf '%s\n' **/*(D-.f:a+x:)
中からbash
:
zsh -c 'printf "%s\n" **/*(D-.f+111)'
シンボリックリンクの場合、シンボリックリンクのターゲットを確認したいので、アプローチを-L
使用しているようです。find
これが真上のロゴの目的です-
。
find
しかし、sのもう1つの副作用は、-L
ディレクトリへのシンボリックリンクにリンクされることです。上記の回避策のls -LR
代わりに同じ状況が発生します。zsh
ディレクトリへのシンボリックリンクにドロップダウンするには、次のように置き換えます。ディレクトリへのシンボリックリンクにドロップダウンしたくない場合は、**
GNUを使用して(Ubuntuのように)次のようにします。***
find
find
find -L . \( ! -xtype l -o -prune \) -type f -perm -111
とにかく、これらすべては、権限だけで誰もがファイルを実行できますが、存在しないディレクトリにあることを考慮していませんでした。検索可能すべてによって。 ACL またはその他のセキュリティ対策が適用されている場合、誤った結果が表示されることがあります。
また考慮検索可能性パスコンポーネントでは、次のことができます。
find -L . \( ! -xtype l -perm -111 -o -prune \) -perm -111
(現在の作業ディレクトリ自体につながるすべてのパスコンポーネントもワールド検索可能であると仮定)
答え2
ls
とを使用してgrep
:
ls -lAR | grep "^\-..x..x..x"
-l:rwx形式で権限を表示します。
-R:再帰的です。