소유자(u)가 한 명령으로 삭제할 수 r
없는 디렉터리의 모든 파일을 삭제하라는 메시지가 표시됩니다 w
.x
나는 다음 명령을 시도했습니다.
find data -type f ! -perm -u=rwx -exec rm -f {} \;
...하지만 너무 많은 파일이 삭제되는 것 같아요.
답변1
나생각하다GNU를 독점적으로 사용 한다고 가정하면 다음을 원합니다 find
.
find -type f \! -perm /u=rwx -exec echo rm -f {} \;
테스트를 위해 하나를 추가했습니다 echo
.
인쇄된 문서가 기대에 부응하는 경우 해당 문서를 제거하십시오. :)
답변2
Linux 시스템을 사용하는 경우 GNU가 있을 가능성이 높으며 find
다른 답변의 예를 따르고 find data -type f ! -perm /u=rwx -delete
.
find
Linux 시스템을 사용하지 않는 경우 조건자 매개변수의 비표준 구문을 이해하지 못하는 BSD 시스템(예: macOS 또는 오픈 소스 BSD 중 하나)을 사용하고 있을 가능성이 높습니다 . 이 경우 각 파일에서 를 사용하여 기호화된 사용자 권한을 선택하고 문자열에 대해 테스트할 수 있습니다(즉, 사용자에게 파일에 대한 권한이 없음을 의미)./u
-perm
stat
---
find data -type f -exec sh -c '[ "$(stat -f %SHp "$1")" = --- ]' sh {} \; -print
이는 stat
Linux가 아닌 BSD를 가정합니다 stat
. 이 옵션은 출력을 -f %SHp
해당 파일의 stat
"높은"( H
사용자 비트) 표기법( S
) 권한 비트( ) 로 형식화합니다. p
일반적인 Linux에 해당하는 방법 stat
은 셸 패턴을 사용한 -c %f
다음 ?0??
이를 셸 패턴과 일치시키는 것입니다.
실제로 파일을 삭제 -print
하도록 변경할 수 있습니다 .-delete
각 파일에 대해 새 셸을 시작하지 않는 약간 더 효율적인 변형:
find data -type f -exec sh -c '
for pathname do
[ "$(stat -f %SHp "$pathname")" = --- ] && echo rm "$pathname"
done' sh {} +
삭제는 echo
파일을 삭제합니다.
답변3
면책조항: 저는 이 책의 현재 저자입니다.생가죽(오른쪽 회전) (바라보다https://github.com/raforg/rawhide)
그리고생가죽(오른쪽 회전) 넌 할 수있어:
rh -UUU data 'f && !ur && !uw && !ux'
-UUU
일치 항목을 연결 해제/삭제/제거합니다.
data
검색 경로입니다.
남은 것은 검색 기준뿐입니다.
f
즉, 일반 파일이라는 뜻입니다.
!ur
소유자가 읽을 수 있는 권한 비트가 설정되지 않았음을 나타냅니다.
!uw
소유자 쓰기 가능 권한 비트가 설정되지 않았음을 나타냅니다.
!ux
소유자 실행 권한 비트가 설정되지 않았음을 의미합니다.
마지막 세 가지 작업은 더 간결하게 수행할 수 있습니다 none(0700)
.
rh -UUU data 'f && none(0700)'
물론, 사용자가 일치하는 파일이 포함된 디렉터리에 대한 쓰기 권한을 가지고 있는 경우에만 일치하는 항목을 삭제할 수 있습니다. 이것이 문제인 경우 sudo를 통합해야 할 수도 있습니다.
rh -x 'sudo rm %s' data 'f && !ur && !uw && !ux'
-x ...
일치할 때마다 주어진 쉘 명령을 실행합니다.
%s
일치하는 파일 경로(예: find {}
)로 대체됩니다.
하지만액세스 제어 목록이 있는 경우에는 이 방법이 작동하지 않습니다.
ACL이 존재하고 확인 중인 모든 파일의 소유자가 현재 사용자인 경우 access(2)
시스템 호출을 사용하여 액세스 권한을 적절하게 확인할 수 있습니다.
GNU find
실제 접근 확인을 수행하는 , , 가 있고 -readable
이를 위한 , , 가 있습니다 .-writable
-executable
rh
ir
iw
ix
rh -UUU data 'f && !ir && !iw && !ix'
그러나 이는 현재 사용자가 모든 관련 파일의 소유자인 경우에만 작동합니다. 파일에 ACL과 다른 소유자가 있을 수 있는 경우 이 access(2)
접근 방식은 도움이 되지 않습니다. 그러니 이런 일이 당신에게 일어나지 않기를 바랍니다.
답변4
그리고 zsh
:
rm -- data/**/*(D.^rwx)