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개)에 도달할 때까지 매번 내부 명령줄 끝에 파일을 추가하여 호출 수를 줄인 다음 명령을 호출하고 새 명령 재구축을 시작합니다. 마지막 문은 각 파일에 대해 새 프로세스를 생성하므로 효율성이 떨어집니다.