파일 권한을 반복적으로 변경하지만 디렉터리는 변경하지 않습니까?

파일 권한을 반복적으로 변경하지만 디렉터리는 변경하지 않습니까?

UNIX 시스템으로 마이그레이션하는 일부 파일에 대한 권한을 대규모로 반복적으로 변경하고 있습니다. ug+rw로 변경했는데 하위 디렉터리를 탐색할 수 없다는 사실을 발견했습니다. 매뉴얼 페이지를 보았지만 chmod디렉토리 제외에 대한 설명이 없었기 때문에 구글링을 해보니 사람들이 find사용자와 그룹에 대해 "실행"하기 위해 디렉토리 권한을 반복적으로 변경하곤 한다는 사실을 발견했습니다. 나는 그렇게 했고 그 후에 그들을 조사할 수 있었습니다.

하지만 제가 보기에는 이 작업을 수행할 수 있어야 합니다 chmod. 디렉터리를 탐색할 수 없도록 만들지 않고 파일을 읽기/쓰기로 재귀적으로 변경하는 것입니다. 내가 이 작업을 "올바른" 방법으로 수행하고 있나요, 아니면 더 쉬운 방법이 있나요?

답변1

더 나은 해결책은

chmod -R ug=rwX,o=rX /path

대문자 X의미는 다음과 같습니다.

파일이 디렉터리이거나 이미 일부 사용자에 대한 실행 권한을 가지고 있습니다.

chmod( 맨 페이지 에서 인용 ).

아니면 사용하고 싶으시다면find

find /path \( -type f -exec chmod ug=rw,o=r   {} + \) -o \
           \( -type d -exec chmod ug=rwx,o=rx {} + \)

답변2

find를 사용하는 것은 "올바른" 방법이며 프로그래밍 방식으로 이를 수행하는 유일한 방법이지만 몇 가지 변형이 있습니다.

find . -type f -exec chmod ug+rw {} +  # "+" may not be on all systems

또는

find . -type f -print0 | xargs -r0 chmod ug+rw  # similar to the -exec + functionality

또는 가장 느립니다:

find . -type f -exec chmod ug+rw {} \;  # in case xargs is not installed

이들 각각은 파일(디렉토리나 심볼릭 링크가 아닌)을 선택하고 chmod해당 파일에 명령을 적용합니다. 처음 두 가지 방법은 chmod최대값(보통 10개)에 도달할 때까지 매번 내부 명령줄 끝에 파일을 추가하여 호출 수를 줄인 다음 명령을 호출하고 새 명령 재구축을 시작합니다. 마지막 문은 각 파일에 대해 새 프로세스를 생성하므로 효율성이 떨어집니다.

관련 정보