findコマンドを見て、find . -maxdepth 1 -perm 521 > test.txt
権限をテキストファイルに出力する方法を見つけましたが、そのような単純なコマンドだけでこれを実行できますかls
?私が知っている限り、ls
権限を具体的に参照する方法がないようで、検索する特定の権限セットを提供することはできません。
私が見落としたかもしれない他の簡単な方法はありますか?
答え1
find
最も簡単な方法です。 zshを使用している場合は、次のものを使用できます。グローバル予選 f
(または権限ビットのみを特徴付けるためのさまざまな修飾子)
printf '%s\n' *(f521)
または
printf '%s\n' *(f[u=rx,g=w,o=x])
記号表記法を使用してください(8進表記法が問題になる場合)。D
隠しファイルも考慮するには、glob修飾子を追加してください。
記号表記法も併用できますfind
。
find . -perm u=rx,g=w,o=x
ほとんどの実装には、次のようなものを提供する述語がfind
あります。そうでない場合は、いつでも。-ls
ls -l
-exec ls -ld -- {} +
答え2
たぶん同様のものを探しているかもしれません。
ls -l | grep '^.r-x-w-r--'
名前に改行を含む一致する権限を持つファイルの場合、そのファイル名の最初の行のみが報告されます。同様の名前のファイルfoobar<newline>xr-x-w-r--
(または同様の名前のファイルへのシンボリックリンク)が存在する場合は、誤検出を提供することもできます。行ベースのユーティリティ(例:)を使用するgrep
。印刷できない文字(改行を含む)-q
を。ls
?
find
IMHO、ファイル検索よりも良いツールはありません。シンプルでシンプルで非常に強力です。find ... -exec ...
またはを使用すると、find ... -print0 | xargs -0 ...
見つかったファイルをさまざまな方法で簡単に操作できます。より良い一般的なツールが見つからないと思います。
答え3
気に入らない場合は、次の標準ツールをfind
使用できます。stat
awk
shopt -s dotglob
awk '/^521/ {print $2}' <(stat -c "%a %n" *) > test.txt
dotglob
に隠しファイルを含めるかどうかを設定する必要があります*
。
答え4
# ls -l | grep -e "-rw-r--r--"
-e
これを使用して、grep
必要な権限を持つすべてのファイルを一覧表示します。