誰でも実行できるファイルを一覧表示する代替方法

誰でも実行できるファイルを一覧表示する代替方法

私は現在、ディレクトリと誰でも(所有者、グループ、その他)が実行できるサブディレクトリのファイルのリストを表示するために考えることができるすべての選択肢を探しています。

あるいは、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番目の文字は小文字です(実際には通常またはまたはです-。一部のシステムには拡張子がありますが、ファイルの場合は実行可能な場合は小文字です。作りなさい)。xslt

フルパスではなくファイル名のみが印刷されます。

を使用すると、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のように)次のようにします。***findfind

find -L . \( ! -xtype l -o -prune \) -type f -perm -111

とにかく、これらすべては、権限だけで誰もがファイルを実行できますが、存在しないディレクトリにあることを考慮していませんでした。検索可能すべてによって。 ACL またはその他のセキュリティ対策が適用されている場合、誤った結果が表示されることがあります。

また考慮検索可能性パスコンポーネントでは、次のことができます。

find -L . \( ! -xtype l -perm -111 -o -prune \) -perm -111

(現在の作業ディレクトリ自体につながるすべてのパスコンポーネントもワールド検索可能であると仮定)

おすすめ記事