chmod 명령을 선택적으로 사용하십시오.

chmod 명령을 선택적으로 사용하십시오.

특정 디렉터리 아래의 모든 파일과 하위 디렉터리에 대해 755 권한을 설정하고 싶지만 755 권한이 없는 구성 요소에만 chmod 755를 적용하고 싶습니다.

find /main_directory/ -exec chmod 755 {} \;

명령이 긴 목록을 반환하는 경우 find시간이 많이 걸립니다. stat 명령을 사용하여 각 구성 요소에 대한 8진수 파일 수준 권한을 확인한 다음 if-else를 사용하여 파일 권한을 전환할 수 있다는 것을 알고 있지만 사용할 수 있는 한 줄 방법이 있습니까? find먼저 xargs파일/디렉토리에 어떤 권한이 있는지 확인하고 그런 다음 chmod다른 값으로 설정한 경우 755로 변경하세요.

답변1

파일 및 디렉터리에 대한 권한을 변경하려는 경우 (적어도 성능 측면에서) 를 사용하는 데 755실질적인 이점이 없습니다 . 다음을 수행할 수 있습니다.find

chmod -R 755 /main_directory

이미 권한이 있는 항목의 권한을 find변경하지 않으 려면 (ctime 타임스탬프 업데이트를 방지하기 위해) 각 디렉터리와 파일에 대한 현재 권한도 테스트해야 합니다.755

find /main_directory ! -perm 0755 -exec chmod 755 {} +

테스트를 통과한 경로 이름을 가능한 한 -exec ... {} +많이 수집 하고 모든 경로에서 동시에 실행합니다.! -perm 0755chmod

종종 모든 파일이 실행 가능하지는 않도록 파일과 디렉터리의 권한을 개별적으로 변경하려고 합니다.

find /main_directory   -type d ! -perm 0755 -exec chmod 755 {} +
find /main_directory ! -type d ! -perm 0644 -exec chmod 644 {} +

답변2

find이미 구문이 있으므로 사용 -exec ... +하는 것은 별 의미가 없지만 xargs요청한 대로:

find /main_directory -not -perm 0755 | xargs chmod 755

관련 정보