2010-08-12 2 views
3

chmod -R 775 *.cgi은 현재 디렉터리의 파일에 대한 사용 권한 만 변경하며 하위 디렉터리의 파일은 전혀 수정되지 않습니다. 이는 단순히 chmod 775 *.cgi과 똑같은 기능입니다. 사람들이 find 등으로 솔루션을 사용하는 것을 보았습니다. 좋아,하지만 심지어 아무것도하지 않으면 -R 모드가 존재하는 이유는 무엇입니까?chmod의 재귀 모드가 재귀를 제외한 모든 작업을 수행하는 이유는 무엇입니까?

+0

쿨 감사합니다. find를 사용하여 설명하는 해답은 유용했지만, -R이 무엇인지 궁금해서 msw의 답변을 선택했습니다. msw가 조금 더 일찍 왔기 때문에 Matthew 대신 msw를 선택했습니다. –

답변

14

아마도 *.cgi이라는 디렉토리가 없기 때문일 수 있습니다. manual Quoth :

-R 재귀 변경 파일 모드 비트. 디렉토리를 명명하는 각 파일 피연산자에 대해 chmod는 파일의 모드 비트를 변경하고 그 아래의 파일 계층에있는 모든 파일 을 변경합니다. 예를 들어

:

$ ls -R 
.: 
a a.c b.c c.c 

./a: 
a.c b.c sub 

./a/sub: 
a.c b.c 
$ chmod -R 444 *.c 
$ ls -l 
drwxr-xr-x 3 msw msw 4096 2010-08-12 18:07 a 
-r--r--r-- 1 msw msw 0 2010-08-12 18:07 a.c 
-r--r--r-- 1 msw msw 0 2010-08-12 18:07 b.c 
-r--r--r-- 1 msw msw 0 2010-08-12 18:07 c.c 
$ : directory a not affected 
$ chmod -R u-w a  
$ ls -l a 
-r-xr-xr-x 1 msw msw 0 2010-08-12 18:07 a.c 
-r-xr-xr-x 1 msw msw 0 2010-08-12 18:07 b.c 
dr-xr-xr-x 3 msw msw 4096 2010-08-12 18:07 sub 
$ ls -l a/sub 
-r-xr-xr-x 1 msw msw 0 2010-08-12 18:07 a.c 
-r-xr-xr-x 1 msw msw 0 2010-08-12 18:07 b.c 
$ : got em 
7

-R 인수로 주어진 임의의 디렉토리로 재귀 할 chmod을 알려줍니다. 당신이 chmod -R 775 *.cgi을 말한다면

, 쉘은 그 패턴과 일치하는 파일의 목록에 *.cgi를 확장하고 인수의 목록으로 그것을 전달합니다 - 그래서 chmod 다른 디렉토리를 조사하도록 요구되지 않습니다.

는 (그것은 어떤 디렉토리 *.cgi 일치에 같이 Recurse ... 것이다 )

+0

오, 잡았다. 따라서 특정 디렉토리 아래에있는 모든 파일을 재귀 적으로 변경하는 데 유용합니다. –

6

당신이 여기

find . -name '*.cgi' -print0 | xargs -0 chmod 755 

find하려고 원하는 것을 달성하기는 모든 파일의 목록을 생성합니다 .cgi은 현재 디렉토리에서 아래쪽으로 끝나고 xargs에 해당 목록을 전달하고 각각 chmod을 적용합니다.

3

*.cgi은 셸에서 .cgi으로 끝나는 현재 디렉토리의 모든 파일 이름 목록으로 확장됩니다. 그런 다음 쉘은 파일 이름 목록과 함께 chmod을 호출합니다.

chmod은 셸에서 가져온 파일 이름을 모두보고 모드가 변경되며 일부 파일이 디렉토리 인 경우 재발행됩니다. 그러나 아마도 그 중 누구도 존재하지 않으므로 재발 할 것이 없습니다.

당신이 할 수있는, 현재 디렉토리와 하위 디렉토리에있는 모든 CGI 파일을 발견하고 그들에 chmod를 실행하려면 : -R 명령 줄 옵션 동안

find . -name '*.cgi' -print0 | xargs -0 chmod 775 
+0

이 답변은 동일합니다. dmckee –

2

*는 쉘 내장입니다. 따라서 chmod은 결코 인수로 *을 얻지 못할 것입니다.

foo0.cgi와 foo1.cgi가 디렉토리의 내용 인 경우를 넣으십시오. chmod -R o+r *.cgi을 입력하면 chmod은 인수로 '-R', 'o + r', 'foo0.cgi'및 'foo1.cgi'을 가져옵니다.당신이 원하는 무엇

쉽게 수행 할 수 있습니다 : 모든 해답에 대한

find . -iname '*.cgi' | xargs chmod 755 
+0

이 답변은 동일한 dmckee입니다. –

관련 문제