異なるumaskを持つファイルとディレクトリを探す

異なるumaskを持つファイルとディレクトリを探す

私はそれを0002使用して返されたumaskを持っています。umask -Su=rwx,g=rwx,o=rx

マスクに基づいて設定された権限を持たないすべてのファイルとディレクトリを見つけるには?

次の操作を実行すると、ディレクトリ777 - mask とファイル666 - mask

find . ! -perm $(umask -S) 

権限が設定されていないすべてのファイル/ディレクトリを探しますu=rwx,g=rwx,o=rx(777 - 002は権限ですが、666 - 002は他の権限です)。これはディレクトリには機能しますが、ファイルには機能しません。

現在設定されているumaskとは異なる権限を持つファイルを見つける方法は?

はい

 touch one
 ls -l
 -rw-rw-r-- 1 trolkura trolkura 0 kvě  4 09:01 one

umaskは0002なので結果はだが664、そうすれば

find . -type f ! -perm $(umask -S)
./one

775権限(ディレクトリ権限)を持たないファイルを見つけるため、結果には新しく作成されたファイルが表示されます。

答え1

これを試してみてはいかがですか?

探す。 - ユーザーtrolkura! -perm -u+rw

これは次のことを意味します。現在のディレクトリから始めて、trolkuraが所有するファイルを見つけます。ここで、グループやその他の権限は何でも(権限文字列の前に)、ユーザー権限はrwです。

答え2

8進形式を使用して手動で計算を実行できます。 POSIXシェルの使用:

dir_perms=$(printf '%#o' "$((0777 - $(umask)))")
non_dir_perms=$(printf '%#o' "$((dir_perms & 0666))")
find . -type d ! -perms "$dir_perms" -o ! -type d ! -perms "$non_dir_perms"

umaskPOSIXは単独で出力形式を指定しませんが、実際にはすべてのシェルに対して1つ以上のゼロがある8進数です。

zshデフォルトでは、前にゼロの数字は8進数として扱われません。ローカルコンテキストで偽装を有効にする(または単に)、次を使用zshできます。sh(){ emulate -L sh; ....}(emulate sh; ...)set -o octalzeroes

dir_perms=0$(([##8] 8#777 - 8#$(umask)))
non_dir_perms=0$(([##8] 8#$dir_perms & 8#666))

前にゼロの付いた数字は、デフォルトではmksh8進数として扱われません。以下を使用set -o posixまたは実行できます。

dir_perms=$(printf '%#o' "$((8#777 - 8#$(umask)))")
non_dir_perms=$(printf '%#o' "$((8#$dir_perms & 8#666))")

関連情報