
私はそれを0002
使用して返されたumaskを持っています。umask -S
u=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"
umask
POSIXは単独で出力形式を指定しませんが、実際にはすべてのシェルに対して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))
前にゼロの付いた数字は、デフォルトではmksh
8進数として扱われません。以下を使用set -o posix
または実行できます。
dir_perms=$(printf '%#o' "$((8#777 - 8#$(umask)))")
non_dir_perms=$(printf '%#o' "$((8#$dir_perms & 8#666))")