chmod
다음 폴더와 파일을 사용하려고 합니다 .
find . -type d -exec chmod 755 {} \;
find . -type f -exec chmod 644 {} \;
하지만 나는 알고 싶다:
find
디렉토리를 사용하고 제외하는 방법.
과 한 줄..
어느 접근 방식이 더 낫
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를 사용합니다.