640より高い権限を持つすべてのファイルを探したいです。おそらく、これはfindコマンドとexecコマンドで使用できます。しかし、私の知識はそのような仕事には十分ではありません。
答え1
私の考えであなたが望むもの
find -perm -640 ! -perm 640
つまり、640には少なくともすべての権限があり、権限ビットは640以外のファイルを検索します。つまり、所有者以外の人が実行または書き込みできるファイル、または所有者が読み取りおよび書き込み可能であり、グループが読み取り可能なファイルの中から誰でも読み取り可能なファイル(ACLがないと仮定)を検索します。一般ファイルに制限を追加したり、少なくとも-type f
ディレクトリ! -type d -o -type d -perm 750 ! -perm 750
に実行権限を付与したりできます。
0o640よりも高い許可ビット(整数として解釈されている)を使用してファイルを一致させるには、いくつかのケースを列挙する必要があります(実際には不可)。ビット単位の表現を見ると、0o640より大きい0と0o777の間の数値を作成する2つの方法があります。つまり、0o600ビットに加えて0o100ビットを設定するか、0o640ビットを設定することです。! -perm 640
0o640権限を一致させるには、最後の権限を削除してください。
find -perm -700 -o -perm -640 ! -perm 640
答え2
これは自分で使用するために編集できる素晴らしいコマンドです。
find -perm -o+r -exec stat --printf='%A %a %n --- %F\n' {} \;
結果の例:
-rw-r--r-- 644 dir1//file4 --- regular file
lrwxrwxrwx 777 dir1/file5 --- symbolic link
他の人に読み取り権限を持つファイルを見つけます。次に、権限、ファイルパス、およびファイルタイプを記号および8進形式で印刷します。
答え3
使用できる行は次のとおりです。
find . -type f -printf %p:%m\\n | while read x; do name=${x%:*}; perm=${x#*:}; if [[ $perm -gt 640 ]]; then echo $name; fi done
このコマンドは、現在のパスですべての一般ファイルを検索し、その名前(%p
)と権限(%m
)をコロンで区切って印刷します。出力の各行は変数としてさらに読み取られ、$x
変数$name
sumに分割されます$perm
。
${x%:*}
方法サフィックスが削除されたx値を返します。
${x#:*}
方法プレフィックスが削除されたx値を返します。
ファイルの権限が基準と一致する場合は、ファイル名を印刷します。
PS:使いやすさのためにコマンドのエイリアスを指定できます。
alias advfind='find ...'