특정 디렉터리 아래의 모든 파일과 하위 디렉터리에 대해 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 0755
chmod
종종 모든 파일이 실행 가능하지는 않도록 파일과 디렉터리의 권한을 개별적으로 변경하려고 합니다.
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