파일에 대한 CHMOD 변경이지만 디렉토리는 아닙니다
문제
모든 파일을 다시 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`
"찾기. -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 {} +;