ProgramingTip

디렉토리가 아닌 파일에 대한 chmod 변경

bestdevel 2020. 11. 10. 22:05
반응형

디렉토리가 아닌 파일에 대한 chmod 변경


chmod를 사용하여 모든 파일을 반복적으로 664로 변경해야합니다. 폴더를 건너 뛰고 싶습니다. 이런 식으로 생각하고 있었는데

ls -lR | grep ^-r | chmod 664

작동하지 않습니다. 나는 chmod로 파이프 할 수 없기 때문에 가정하고 있습니다. 누구나 쉽게 할 수있는 방법을 알고 있습니까?

감사합니다


find -exec단일 한 파일에 대한 별도의 하위 프로세스를 생성하는 일반적으로 관련이없는 단점이 있습니다. 그러나 완벽하게 작동하며 파일 수가 많아 질 때만 성능이 있습니다. 사용 xargs하기 위해 하위 프로세스를 실행하기 전에 큰 그룹으로 파일 이름까지 의지 배치를 그룹 파일.

를 사용할 때 xargs공백, 줄 바꿈 또는 기타 특수 문자가 포함 된 파일 이름을 처리 하도록 지정주의해야 합니다.

이 두 가지 문제를 모두 해결하는 해결 방법은 다음 find과 같다 xargs( 충분 하고 구현이 충분한 가정 ).

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

-print0원인은 findNUL 문자 (보다는 공간)와 출력 스트림에 파일 이름을 종료 하고을 -0xargs그것이 입력 형식으로 기대한다는 것을 알 수 있습니다.


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

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

문제는 모든 파일에 -exec대해 chmod프로세스를 시작하는 것입니다. xargs접근 방식이를 방지하고, 당신의 버전이 우수 find하고 xargs"경로 이름에 공백이"문제가 제공 될 수있다; 수락 된 답변을 참조하십시오.

그리고 기록을 위해, chmod 할 파일이 너무 많거나 경로 이름이 존재하는 길이가 너무 큰 경우 백틱을 사용하면 중단됩니다.


내 간결한 2 센트 ...

리눅스 :

$ 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-only-208798/?s=a70210fb5e5d0aa7d3c69d8e8e64e3ed 를 통해

"find. -type f -print | xargs chmod 444"작동하지 않습니까? 그렇지 않은 경우. -print myfile.sh 및 vi myfile.sh 디렉토리를 제거하고 (너무 많지> 함) 1, $ s / ^ / chmod 444 / 및 sh myfile.sh.


GNU 찾기

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

참고 URL : https://stackoverflow.com/questions/1163294/changing-chmod-for-files-but-not-directories

반응형