find의 -exec 명령에서 {} +의 의미는 무엇입니까?


23

나는의 의미를 알고 싶어 {} +exec명령을, 그리고의 차이 무엇인가 {} +하고 {} \;. 정확히 말하면,이 둘의 차이점은 무엇입니까?

find . -type f -exec chmod 775 {} +
find . -type f -exec chmod 775 {} \;

5
man find(1)누구나 쉽게 찾을 수 있도록 매우 자세하게 설명되어 있습니다. 게으르지 마십시오.
Miroslav Koškár

감사합니다. Miroslav, 내가 검색했습니다 man exec!

아, 나는 {} +이전 에 사용법 을 본 적이 없었습니다 . 나는 일반적으로 (자주 그것에 대해 xargs를 사용 find ... -print0 | xargs -0 ...)

답변:


27

사용 ;(세미콜론) 또는 +(더하기 기호 것은)에 의해 호출 쉘 명령을 종료하기 위해 필수입니다 -exec/을 execdir.

;(세미콜론) 또는 +(더하기 부호) 의 차이점 은 인수가 find의 -exec/ -execdir매개 변수 로 전달되는 방식 입니다. 예를 들면 다음과 같습니다.

  • using ;은 여러 명령을 실행합니다 (각 인수마다 별도로)

    예:

    $ find /etc/rc* -exec echo Arg: {} ';'
    Arg: /etc/rc.common
    Arg: /etc/rc.common~previous
    Arg: /etc/rc.local
    Arg: /etc/rc.netboot
    

    다음의 모든 인수 find는 명령에 대한 인수로 간주됩니다.

    문자열 {}은 처리중인 현재 파일 이름으로 바뀝니다.

  • 를 사용 +하면 가능한 가장 적은 명령이 실행됩니다 (인수가 결합되어 있기 때문에). xargs명령이 작동 하는 방식과 매우 유사 하므로 한 줄에 최대 인수 제한을 초과하지 않도록 명령 당 가능한 많은 인수를 사용합니다.

    예:

    $ find /etc/rc* -exec echo Arg: {} '+'
    Arg: /etc/rc.common /etc/rc.common~previous /etc/rc.local /etc/rc.netboot
    

    명령 행은 선택한 각 파일 이름을 끝에 추가하여 빌드됩니다.

    {}명령 내에서 하나의 인스턴스 만 허용됩니다.

또한보십시오:


차이와 주요 하나. 참조 user1116056의 대답
Jahid

24

find 명령이 세 개의 파일 아래에 있다고 가정합니다.

fileA
fileB
fileC

당신이 사용하는 경우 -exec플러스 (과 +) 기호,

find . -type f -exec chmod 775 {} +  

그것은 될 것입니다 :

chmod 775 fileA fileB fileC

명령 행은 끝에 일치하는 각 파일 이름을 끝에 추가하여 xargs작성되며, 명령 행 을 빌드 하는 것과 같은 방식입니다 . 명령의 총 호출 수 ( chmod이 경우)는 일치하는 파일 수보다 훨씬 적습니다.

-exec세미콜론 ( ;) 과 함께 사용 하는 경우

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

그것은 될 것입니다 :

chmod 775 fileA
chmod 775 fileB
chmod 775 fileC

5

에 따라 man find:

-exec 명령 {} + -exec 조치의이 변형은 선택된 파일에서 지정된 명령을 실행하지만 명령 행은 선택한 각 파일 이름을 끝에 추가하여 빌드됩니다. 명령의 총 호출 수는 일치하는 파일 수보다 훨씬 적습니다. 명령 행은 xargs가 명령 행을 빌드하는 것과 거의 같은 방식으로 빌드됩니다. 명령 내에서 하나의 '{}'인스턴스 만 허용됩니다. 명령은 시작 디렉토리에서 실행됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.