~ 50k 디렉토리와 ~ 1m 파일이있는 디렉토리가 있습니다.
디렉토리가 아닌 모든 파일의 소유자 (또는 권한)를 변경하고 싶습니다. 이것은 원격 서버 (~ 150k 디렉토리 및 ~ 3.6m 파일)에서 추가 파일을 SCP로 보내려고하기 때문입니다.
내가 가진 디렉토리는 원격 디렉토리의 일부이지만 scp는 실패했습니다 …
SCP를 다시 실행하면 원격 디렉토리에서 이미 복사 한 파일을 덮어 쓰면서 다시 시작됩니다.
답변
를 사용할 수 있으며 프로세스에서 트리거되지 않는다는 find
추가 이점이 ARG_MAX
있습니다. 부모 디렉토리에서 :
find . -type f -exec chown newowner {} +
의 경우 chmod
:
find . -type f -exec chmod 644 {} +
-type f
것 find
파일 만.
답변
또 다른 대안은을 사용하는 것 xargs
입니다. -print0
옵션과 함께 find
해당 -0
옵션 을 사용해야합니다 xargs
.
find . -type f -print0 | xargs -0 chown newuser:newgroup
보낸 사람 man find
:
-print0
표준 출력에 전체 파일 이름을 인쇄 한 다음 null 문자를 출력하십시오 . 이렇게 하면 개행 또는 다른 유형의 공백이 포함 된 파일 이름을 찾기 출력을 처리하는 프로그램에서 올바르게 해석 할 수 있습니다. 이 옵션은 xargs의 -0 옵션에 해당합니다.
xargs
또한 올바르게 처리 ARG_MAX
합니다.