파일이나 폴더에만 재귀 chmod 적용

파일이나 폴더에만 재귀 chmod 적용

파일과 폴더에 chmod를 한 줄로 적용하고 싶은데,

원래:

chmod 700 ./* -R # but only apply to folders
chmod 600 ./* -R # but only apply to files

물론 Google을 검색하고 매뉴얼 페이지를 읽었습니다.

따라서 문제는 단점이나 위험이 있습니까? 아니면 다음이 안전합니까?

find . -type f -print0 | xargs -0 chmod 600 && find . -type d -print0 | xargs -0 chmod 700

답변1

저는 ACL을 사용하여 대문자 X라는 또 다른 가능성이 있다는 것을 발견했습니다. 다음 구조를 고려하면(디렉터리 3개, 파일 3개):

drw------- 1/
drw------- 2/
drw------- 3/
-rw------- 4
-rw------- 5
-rw------- 6

실행을 설정할 수 있지만 디렉터리에만 해당됩니다.

chmod u+X *

결과는 다음과 같습니다.

drwx------ 1/
drwx------ 2/
drwx------ 3/
-rw------- 4
-rw------- 5
-rw------- 6

find및 와 비교하면 xargs명령이 하나만 필요하므로 파이프가 필요하지 않다는 장점이 있습니다. 이러한 이유로 나는 이것이 더 빠르다고 말하고 싶습니다.

귀하의 예에서는 기본적으로 한 줄에 두 개의 명령을 사용하고 있습니다.

  • 첫 번째는 파일을 검색하고 이름을 인쇄한 후 xargs나머지 작업을 수행합니다.
  • 두 번째 검색 디렉터리도 동일하게 동작합니다.

각 호출에서 세 가지를 실행합니다.주문하다:

  • 달리기find그러면 관심 있는 파일의 이름이 인쇄됩니다.
  • 이 이름을 다음에 전달하십시오.xargs그래서 포장지 역할을 합니다.chmod(그래서 한 번만 호출됩니다.)

사용 &&하여 주목할 가치가 있습니다.find

단, find( -exec) 만 사용하는 경우 chmod해당 명령어가 호출됩니다.파일당표준을 준수합니다 find. 디렉터리에 200개의 파일이 있으면 chmod200번 호출됩니다. 이는 chmod200개의 파일에 대해 한 번 호출하는 것보다 속도가 느립니다. 물론, 결국에는 chmod상대적으로 빠르고 가벼운 작업이기 때문에 적당한 파일 수에서는 차이를 느끼지 못할 것입니다.

마지막으로 프로그램 간 파일 이름 전달에 대한 또 다른 세부 사항은 공백입니다. 각 명령이 파일 이름을 처리하는 방법(올바른 따옴표를 사용하는지 여부)에 따라 이름에 공백이 있는 파일을 처리하는 데 문제가 있을 수 있습니다.이 슈퍼그림.png다음과 같이 빠르게 처리할 수 있습니다.이것,훌륭한그리고그림.png).

관련 정보