문제

모든 파일을 다시 664로 변경하려면 chmod를 사용해야합니다. 폴더를 건너 뛰고 싶습니다. 나는 이런 일을 생각하고 있었다

ls -lR | grep ^-r | chmod 664

이것은 작동하지 않습니다. 나는 Chmod에 파이프를 할 수 없기 때문에 이것을 쉽게 수행 할 수있는 방법을 아는 사람이 있습니까?

감사

도움이 되었습니까?

해결책

find -exec 답은 좋은 것이지만, 모든 단일 파일마다 별도의 하위 프로세스를 만듭니다. 그러나 완벽하게 기능적이며 파일 수가 얻을 때만 잘못 수행됩니다. 진짜 크기가 큰. 사용 xargs 하위 프로세스를 실행하기 전에 파일 이름을 큰 그룹으로 배치합니다. 그룹 파일의.

당신은 xargs, 당신은 내장 된 공간, 최신 또는 기타 특수 문자로 파일 이름을 올바르게 처리합니다.

이 두 가지 문제를 해결하는 솔루션은 (충분히 괜찮다고 가정합니다. find 그리고 xargs 구현):

find . -type f -print0 | xargs -0 chmod 644

그만큼 -print0 원인 find 공간이 아닌 NUL 문자로 출력 스트림의 파일 이름을 종료하려면 -0 에게 xargs 입력 형식으로 기대해야한다는 것을 알려줍니다.

다른 팁

이를 수행하는 또 다른 방법은 사용하는 것입니다 find ... -exec ... 다음과 같이 :

find . -type f -exec chmod 644 {} \;

문제는 -exec 시작 a chmod 모든 파일에 대한 프로세스. 그만큼 xargs 접근 방식은 이것을 피하고 버전이있는 경우 우수합니다. find 그리고 xargs "PathNames의 공간"문제에 대처할 수 있습니다. 허용 된 답변을 참조하십시오.

그리고 레코드의 경우, chmoded에 너무 많은 파일이 있거나 PathNames의 집계 된 길이가 너무 큰 경우 백 틱을 사용하면 중단됩니다.

내 간결한 두 센트 ...

Linux :

$ chmod 644 `find -type f`

OSX :

$ chmod 644 `find . -type f`

이는 현재 디렉토리에 포함 된 모든 파일과 모든 하위 디렉토리에 재귀 적으로 변경하기 위해 작동합니다. 다른 디렉토리를 타겟팅하려면 대체 . 올바른 경로로 :

$ chmod 644 `find /home/my/special/folder -type f`

~을 통해 http://www.linuxquestions.org/questions/aix-43/chmod-recursion-files-ody-208798/?s=a70210fb5e5d0aa7d3c69d8e8e64e3ed

"찾기. -Type f -Print | XARGS CHMOD 444"Shoud Work, 그렇지 않습니까? 그렇지 않다면 찾으십시오. -print> myfile.sh 및 vi myfile.sh 디렉토리를 제거하고 (너무 많아서는 안됩니다), 1, $ s/^/chmod 444/및 sh myfile.sh.

GNU 찾기

find /path -type f -exec chmod 644 {} +;

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top