디렉토리가 아닌 파일에 대한 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
원인은 find
NUL 문자 (보다는 공간)와 출력 스트림에 파일 이름을 종료 하고을 -0
은 xargs
그것이 입력 형식으로 기대한다는 것을 알 수 있습니다.
이를 수행하는 또 다른 방법 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
'ProgramingTip' 카테고리의 다른 글
ostream을 사용하여 C ++에서 서명되지 않은 문자를 16 진수로 어떻게 인쇄합니까? (0) | 2020.11.10 |
---|---|
"아무것도 일치하지 않음"에 대한 정규식 구문? (0) | 2020.11.10 |
iPhone 및 WireShark (0) | 2020.11.10 |
std :: string으로 조건부 중단 점을 만드는 방법 (0) | 2020.11.10 |
PHP를 사용하여 다음 문자를 가장 쉽게 사용하는 방법 (0) | 2020.11.10 |