파일 및 디렉터리에 다른 권한 적용

파일 및 디렉터리에 다른 권한 적용

써니가 위 질문에 답했습니다.이 게시물, 대답은 다음과 같이 주어진다

스크립트가 필요하지 않습니다.

// 목차:

find . -type d -exec chmod XXX {} \;

// 문서:

find . -type f -exec chmod XXX {} \;

평신도의 용어로 설명할 수 있나요?

{}나는 설명할 수 없는 표시를 정말 좋아하지 않으며 \신경 쓰지도 않습니다 ;!

나는 Linux cli/bash/shell 등을 배우고 인터넷 검색 등을 통해 답을 찾으려고 노력해 왔으며 위의 상황이 발생하지 않는 한 대부분 잘 작동합니다.

답변1

{}일치하는 파일이 발견되었음을 나타내는 자리 표시자 입니다 . 이는 일치하는 파일이 발견된 exec 매개변수에 전달된 명령을 알려주는 방법입니다.

;Exec 매개변수에 사용된 명령을 종료합니다 . 실행 셸에서 구문 분석되지 않도록 \이스케이프하기 위한 것 입니다( 일반적으로 순차적으로 실행될 여러 명령을 분리하는 데 사용됩니다). 다른 방법으로 쉽게 참조할 수 있습니다.;;

find . -type d -exec chmod XXX '{} ;'
find . -type f -exec chmod XXX '{} ;'

; 대신 +를 사용할 수도 있습니다. 이렇게 하면 find가 각 일치 항목을 목록에 추가하고 이를 모두 하위 프로세스에 전달하게 됩니다(각 일치 항목에 대한 exec 인수에서 명령을 실행하기 위해 새 하위 프로세스를 생성하는 대신). (참고: 일치하는 항목이 많은 경우 +를 사용하면 명령이 너무 길다는 오류가 발생할 수 있습니다.)

find . -type d -exec chmod XXX {} +
find . -type f -exec chmod XXX {} +

답변2

.= 현재 디렉토리, 즉. 현재 디렉터리와 그 아래 디렉터리를 검색합니다. 홈 디렉토리를 검색하려면 을 사용하십시오 /home. 홈 디렉토리를 검색하려면 을 사용하십시오 ~/. 사용자 "foo"에 대한 디렉토리를 검색하려면 ~foo/.find 를 사용하십시오.모든 것루트부터 아래로 /.

알아채다! :접근을 요청합니다! 디렉터리(예: 다른 사용자의 홈 디렉터리)로 내려갈 수 있는 권한이 없으면 find이 작업도 수행할 수 없습니다! 이것뿌리-유저에게는 그런 어리석은 제한이 없지만 "큰 힘에는 큰 책임이 따른다".

-type d|f= find는 특정 "유형"의 파일을 찾도록 지시합니다. 파일, 디렉토리, 소켓, 심볼릭 링크, 명명된 파이프… A는 f찾고 있는 유형이 파일임을 지정하고, a는 디렉터리를 반환 d하려고 함을 지정합니다 .find

일반적으로 find찾은 파일만 나열되며 이는 암시적인 -print지시어입니다. 그러나 여기에서는 find가 chmod찾은 파일/디렉토리에 대해 명령을 실행하기 를 원합니다 (여기). 이를 위해 -execor 지시문을 사용할 수 있습니다 -ok. -ok명령을 실행하기 전에 먼저 "예" 또는 "아니요"를 묻는 메시지가 나타납니다.

실행될 명령은 명령 바로 다음에 시작되어 (세미콜론)이 나타날 -exec때까지 계속됩니다 . 불행하게도 세미콜론은 쉘(및 기타)에 특별한 의미도 있습니다. 쉘은 이를 사용하여 명령을 한 줄로 그룹화합니다(예: ). 그래서 우리는 쉘이 이전에 세미콜론을 "인용"하지 않도록 세미콜론을 "인용"해야 합니다 . 쉘은 세 가지 형식의 인용을 허용합니다. 큰 따옴표("...")와 작은 따옴표('...')는 일반적으로 문자열에 사용됩니다. 이들 중 하나를 사용하여 세미콜론을 인용할 수 있습니다. 그러나 여기서처럼 단일 문자만 인용하려는 경우 세 번째 인용 형식인 백슬래시(\)를 사용하는 것이 더 일반적입니다. 결과 는 .​​find;bashcommand1 ; command2find\;find\;;

일반적으로 우리가 실행하려는 명령은 find파일 이름을 찾아야 합니다. 발견된 파일 이름의 자리 표시자로 사용됩니다. 일반적으로 명령이 공백이 포함된 파일 이름을 단일 파일 이름으로 처리하도록 자리 표시자를 따옴표로 묶는 것이 좋습니다.find{}"{}"

내가 찾 chmod u=rw,go=r {}거나 가장 잘 작동하는 파일의 경우 디렉토리의 경우 또는 (편집증 정도에 따라)를 chmod u=rw,go= {}사용해야 합니다 .chmod u=rwx,go=rx {}chmod u=rwx,go= {}

답변3

나는 설명할 수 없는 {}와 \ 태그를 정말 좋아하지 않으며, 그것도 신경쓰지 않습니다.

또는 {} 및 \;가 너무 많은 문제인 경우 대안이 있습니다. 또한 이 방법은 find ... -exec 공식보다 파일 이름의 공백을 더 잘 처리합니다.

find . -type d -print0 | xargs -0 chmod MASK
find . -type f -print0 | xargs -0 chmod MASK

find 명령의 -print0은 null로 끝나는 문자열 목록을 생성합니다. xargs는 목록을 처리합니다. -0은 null로 끝나는 문자열로 분할되어야 함을 의미합니다.

또한 어떤 경우에는 이 표현식이 find 명령의 -exec 매개변수보다 빠릅니다. 다음은 몇 가지 토론입니다.https://stackoverflow.com/questions/896808/find-exec-cmd-vs-xargs

-print0은 일반적으로 Unix가 아닌 Linux에서만 작동할 수도 있습니다.

답변4

간단히 소개하자면 \;:

\;명령의 구분 기호는 발견된 각 파일에 대해 새 프로세스를 시작합니다 -exec. find이제 100,000개의 파일이 포함된 디렉토리 트리에서 이것을 실행한다고 상상해 보십시오...

한 번에 /many/ 파일을 처리할 수 있는 이와 같은 명령을 실행하면 chmod XXX ...성능이 향상됩니다.

find <base> <conditions> -exec chmod xxx {} +

+더 큰 명령줄을 구축하고 시작해야 하는 프로세스 수를 대폭 줄여 보겠습니다. 게다가 그럴 필요도 없습니다 \:-)

관련 정보