다른 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는 단독으로 출력 형식을 지정하지 않지만 실제로는 모든 쉘에 대해 앞에 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이 붙은 숫자는 기본적으로 mksh8진수로 처리되지 않습니다 . 다음을 사용 set -o posix하거나 수행할 수 있습니다.

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

관련 정보