파일 권한을 재귀 적으로 변경하지만 디렉토리는 변경하지 않습니까?


13

유닉스 시스템으로 마이그레이션 한 일부 파일의 권한을 대량으로 변경했습니다. 나는 그들을 ug + rw로 변경했지만 하위 디렉토리를 통과 할 수 없다는 것을 알았습니다. 나는 매뉴얼 페이지를 보았고 chmod디렉토리 제외에 대한 설명을 보지 못했기 때문에 약간의 구글 검색을 통해 사람들이 find디렉토리에 대한 권한을 재귀 적으로 사용자 및 그룹의 '실행'으로 변경하는 것을 발견했습니다 . 나는 그것을하고 나서 그들을 조사 할 수 있었다.

그러나 나는이 찾기를 할 수 있어야한다고 생각 chmod했다. 재귀 적으로 파일을 읽기 / 쓰기로 변경하지만 디렉토리를 돌릴 수 없도록 만들었습니다. 나는 이것을 '올바른'방법으로 했습니까, 아니면 더 간단한 방법이 있습니까?

답변:


12

더 나은 해결책은

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

자본의 X의미 : 실행 비트를 설정

파일이 디렉토리이거나 이미 일부 사용자에게 실행 권한이 있습니다.

( chmodMan 페이지 에서 인용 ).

또는 사용하려는 경우 find

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

내 USB 하드 드라이브에 대해이 명령의 모든 버전을 광범위하게 사용했습니다. chmod -v -R ugo = rwX / path 감사합니다!
친구

분명히 find모든 파일 권한을 600으로 설정하고 모든 디렉토리 권한을 700으로 설정 하지 않으면 방법이 없습니다 . (나는 주제에 대한 인터넷 검색을 통해 여기에 도착했습니다.) 단일 명령 으로 수행 수 있다면 chmod -R자유롭게 수정하십시오.
와일드 카드

@Wildcard : 명령 chmod -R u=rwX,go= /path이 원하는 바를 정확하게 수행 하지는 않습니다. 실행 비트가 이미 설정되어 있는지 여부에 따라 모든 dirs를 700으로 설정하고 모든 파일을 600 또는 700으로 설정하며 이것이 올바른 일이라고 생각합니다. .
enzotib

1
@enzotib, 그렇습니다 — 거의 그러나 아주 아닙니다. 필자의 경우 스크립트 또는 바이너리인지 여부에 관계없이 모든 파일 (디렉토리는 아님) 의 실행 비트를 비활성화하고 싶습니다 . 그렇게 find당신이 쓴 명령 템플릿으로 매우 도움이되었다. :)
와일드 카드

@Wildcard 먼저 실행 비트를 재귀 적으로 제거한 다음 위 명령을 사용하여 디렉토리에만 다시 추가하는 것은 어떻습니까?
Michael

3

변형이 있지만 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) 파일을 내부 명령 줄 끝에 추가하여 호출 횟수를 줄인 다음 명령을 호출하고 새 명령을 다시 작성하기 시작합니다. 마지막 문장은 각 파일에 대해 새로운 프로세스를 생성하므로 효율성이 떨어집니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.