2013-11-02 2 views
30

은 왜 644 ABD 모든 파일을 변경하려고이 작업은 모든되지 않습니다찾기. -t f -exec chmod 644 {}; -d 755에

find . -type f -exec chmod 644 {} ; 

내가 얻을 : 찾을 :`간부 ' 덕분에 인수 누락

+4

을,'하지으로' ; '혼자. –

+3

...'-exec' 다음의 모든 것이 인수로 처리되기 때문입니다. 만약 당신이 베어가 있다면';'그것은'find' 전체에 대한 종결 자로 취급 될 것입니다,하지만 정말로'exec'를 종결 할 필요가 있습니다. 그래서 그것은 인수 문자열의 일부로 이스케이프되어야합니다. –

+0

가능한 [폴더 및 모든 하위 폴더 및 Linux 우분투 터미널의 파일에 대해 chmod를 설정하는 방법?] (http://stackoverflow.com/questions/3740152/how-to-set-chmod-for-a- files-in-linux-ubunt) –

답변

11

좋은 대안은 이것이다 :

find . -type d | xargs chmod -v 755 
:
find . -type f | xargs chmod -v 644 

및 디렉토리

16,

와 더 명시합니다 : xargs를에

find . -type f | xargs -I{} chmod -v 644 {} 
+0

공백이있는 발견 된 파일을 처리하는 방법은 무엇입니까? 오류가 발생합니다. 파일 이름은 공백으로 나뉘며 각 분할 된 부분에 대해 chmod를 실행하려고 시도합니다. – Lidia

+0

@Lidia를 찾으려면'-print0' 옵션을 추가하고'xargs -0'를 찾으십시오. – TAllieri

+0

@TAllieri 고마워요 – Lidia

90

배관은 발견의 내부에서 수행 할 수있는 그 일의 더러운 방법입니다.

find . -type d -exec chmod 0755 {} \; 
find . -type f -exec chmod 0644 {} \; 

당신과 같은 다른 옵션으로 제어 훨씬 더 될 수 있습니다

find . -type d -user harry -exec chown daisy {} \; 

당신은 발견에 아주 멋진 일을 할 수 있으며, 당신이 너무 매우 위험한 일을 할 수 있습니다. "man find"를 보아도 길지만 길게 읽을 가치가 있습니다. 그리고 언제나처럼 기억하십시오 :

  • 당신이 루트라면 성공할 것입니다.
  • 루트 (/)에 있으면 나쁜 날이 올 것입니다.
  • /path/to/디렉토리를 사용하면 찾기를 원하는 위치를 명확하게 정의하는 것처럼 작업을 훨씬 안전하게 할 수 있습니다.

    chmodf() { 
         find $2 -type f -exec chmod $1 {} \; 
    } 
    chmodd() { 
         find $2 -type d -exec chmod $1 {} \; 
    } 
    

    는 지금이 바로 가기를 사용할 수 있습니다 :

+2

왜 xargs 방법이 "더러운 방법"이 될까요? 모든 파일을 인수로 사용하여 chmod를 한 번만 실행하면 큰 이점이 있습니다. "-exec chmod"메소드는 파일 당 서브 프로세스를 작성합니다. –

+0

chmod를 한 번만 실행하려면 'find'로 변경하십시오. -type f -exec chmod 0644 {} +'이것은 xargs 메소드와 본질적으로 동일하며 하나의 명령 행을 빌드합니다. (\는 세미콜론 만 이스케이프합니다.) – johnthacker

+0

빠른 oneliner :'find. -t d -exec chmod 0755 {} \; && 찾기. -t f -exec chmod 0644 {} \;' – lucaferrario

1

나는 자주 내 ~/.bashrc 파일에 함수를 만든이 필요`\로 종료

chmodd 0775 . 
chmodf 0664 .