chmod 명령을 선택적으로 사용 /main_directory/ -exec chmod 755

특정 디렉토리 아래의 모든 파일 및 하위 디렉토리에 755 권한을 설정하고 싶지만 755 권한이없는 구성 요소에 대해서만 chmod 755를 실행하려고합니다.

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

은 IF find명령은 긴 목록을 반환,이 시간이 많이 걸릴 것입니다. stat 명령을 사용하여 각 구성 요소의 Octal 파일 수준 권한을 확인한 다음 if-else를 사용하여 파일 권한을 전환 할 수 있지만 파일 / 디렉토리의 권한을 사용 find하고 xargs먼저 확인하는 단일 행 접근법이 있습니까? 다음 사용 chmod이 다른 것으로 설정되어있는 경우 755로 변경.



답변

755파일과 디렉토리 모두 에 대한 권한을 변경하려는 경우 find(적어도 성능 관점에서) 사용하면 실질적인 이점이 없으며 수행 할 수 있습니다.

chmod -R 755 /main_directory

ctime 타임 스탬프 업데이트를 피하기 위해 find이미 권한이있는 항목에 대한 권한 변경을 피하기 위해 실제로 사용 하려면 755각 디렉토리 및 파일에 대한 현재 권한도 테스트해야합니다.

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

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

일반적으로 파일과 디렉토리에 대한 권한을 개별적으로 변경하여 모든 파일이 실행 가능한 것은 아닙니다.

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


답변

으로는 find입수했습니다 -exec ... +이 사용에 많은 포인트가 아니라, 구문을 xargs당신이 그것을 요청으로 만 :

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


답변