파일 소유자를 재귀 적으로 변경하지만 디렉토리는 변경하지 않습니다.


14

~ 50k 디렉토리와 ~ 1m 파일이있는 디렉토리가 있습니다.

디렉토리가 아닌 모든 파일의 소유자 (또는 권한)를 변경하고 싶습니다. 이것은 원격 서버 (~ 150k 디렉토리 및 ~ 3.6m 파일)에서 추가 파일을 SCP로 보내려고하기 때문입니다.

내가 가진 디렉토리는 원격 디렉토리의 일부이지만 scp는 실패했습니다 ...

SCP를 다시 실행하면 원격 디렉토리에서 이미 복사 한 파일을 덮어 쓰면서 다시 시작됩니다.

답변:


20

를 사용할 수 있으며 프로세스에서 트리거되지 않는다는 find추가 이점이 ARG_MAX있습니다. 부모 디렉토리에서 :

find . -type f -exec chown newowner {} +

의 경우 chmod:

find . -type f -exec chmod 644 {} +

-type ffind파일 만.


1
정말 잘 작동합니다! 감사! chmod와 chown 모두 +1
Marcus Brunsten

2
따라서 find트리거하지 ARG_MAX않습니까? 나는 항상 그럴 것이라고 생각했다. 당신은 항상 무언가를 배웁니다 :)
kos

5

또 다른 대안은을 사용하는 것 xargs입니다. -print0옵션과 함께 find해당 -0옵션 을 사용해야합니다 xargs.

find . -type f -print0 | xargs -0 chown newuser:newgroup

보낸 사람 man find:

-print0

표준 출력에 전체 파일 이름을 인쇄 한 다음 null 문자를 출력하십시오 . 이렇게 하면 개행 또는 다른 유형의 공백이 포함 된 파일 이름을 찾기 출력을 처리하는 프로그램에서 올바르게 해석 할 수 있습니다. 이 옵션은 xargs의 -0 옵션에 해당합니다.

xargs또한 올바르게 처리 ARG_MAX합니다.


2
find..exec이상한 파일 이름을 처리합니다. 어떻게 생각하지 않습니까?
heemayl

1
@heemayl 나는 몇 가지 테스트를 실행했으며 당신이 옳은 것 같습니다. 나는 정정되었다. 지적 해 주셔서 감사합니다. 내 답변을 업데이트했습니다.
AP
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.