재귀적으로 chmod

재귀적으로 chmod

chmod다음 폴더와 파일을 사용하려고 합니다 .

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

하지만 나는 알고 싶다:

  1. find디렉토리를 사용하고 제외하는 방법 .과 한 줄..

  2. 어느 접근 방식이 더 낫 find -exec습니까 xargs?

답변1

사용할 것인가 find, xargs강제로 할 것인가?

그렇지 않은 경우 다음을 사용할 수 있습니다.

chmod -R u=rwX,go=rX *

답변2

chmod에 명명된 인수를 사용하여 이 작업을 수행할 수 있습니다.

 chmod u=rwX,go=rX {}

여기서 중요한 부분은 대문자 X입니다. 디렉터리인 경우에만 권한을 실행 파일로 변경하세요. 바라보다매뉴얼 페이지자세한 내용은.

답변3

find . -type d -exec chmod 755 {} + -or -type f -exec chmod 644 {} +

find ... -exec ... +유사하지만 find ... -exec ... \;일치하는 파일의 큰 집합 각각에 대해 명령이 한 번만 실행된다는 점만 다릅니다.

옛날에는 한 번 find OPTIONS... -exec COMMAND... \;에 하나의 파일만 작업해야 했습니다. 따라서 xargs효율성을 높이기 위해 작업을 그룹화하기 위해 고안되었습니다. 그러나 xargs자체적인 문제가 있습니다. 즉, 생성할 수 없는 방식으로 참조되는 입력을 기대합니다 find. find OPTIONS... | xargs COMMAND...파일 이름에 공백이나 공백이 포함되어 있지 않다는 것을 모르면 '"\이것은 쓸모가 없습니다 .

그런 다음 GNU가 발명되어 find OPTIONS... -print0 | xargs -0 COMMAND...파일 이름에 어떤 문자라도 나타날 수 있게 되었습니다. 그러나 다른 사람들이 그것을 채택하는 데 오랜 시간이 걸렸고 그 동안 Sun(제 생각에는)이 find OPTIONS... -exec COMMAND... +그룹화와 동일한 작업을 수행 xargs하지만 복잡성이 추가되지 않는(더 긴 명령줄, 명령당 하나로 제한 find) 그것을 발명했습니다. 이제 find ... -exec ... +표준(현재단일 유닉스 v3) 및 xargs -0. 이전 Linux 시스템과의 호환성을 유지해야 하는 경우가 아니면 잊어버리십시오 xargs.

답변4

Sherlock got (1), for (2) xargs는 더 합리적인 구문과 더 적은 쉘 호출 오버헤드를 허용하므로 일반적으로 선호됩니다. 공백과 특수 문자가 있는 경로는 문제를 일으킬 수 있으므로 find 및 xargs 의 -print0및 옵션에 주의하세요.-0

일회성 실행의 경우 거대한 트리를 수정하지 않는 한 차이는 실제로 중요하지 않습니다. 스크립트로 형식화하기 위해 이 작업을 자주 수행하는 경우 xargs를 사용합니다.

관련 정보