나는 그것을 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는 단독으로 출력 형식을 지정하지 않지만 실제로는 모든 쉘에 대해 앞에 0이 하나 이상 있는 8진수입니다.
zsh
기본적으로 앞에 0이 있는 숫자는 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))
앞에 0이 붙은 숫자는 기본적으로 mksh
8진수로 처리되지 않습니다 . 다음을 사용 set -o posix
하거나 수행할 수 있습니다.
dir_perms=$(printf '%#o' "$((8#777 - 8#$(umask)))")
non_dir_perms=$(printf '%#o' "$((8#$dir_perms & 8#666))")