find의 -exec 명령에서 {} +는 무엇을 의미하나요?

find의 -exec 명령에서 {} +는 무엇을 의미하나요?

{} +명령의 의미와 exec와 의 차이점을 알고 싶습니다 . 이 둘의 차이점은 정확히 무엇입니까?{} +{} \;

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

답변1

쉘 명령을 종료/호출하려면 ;(세미콜론) 또는 (더하기 기호)를 사용해야 합니다.+-execexecdir

;(세미콜론)과 (더하기 기호)의 차이점은 +인수가 find의 -exec/ -execdir인수로 전달되는 방식입니다. 예를 들어:

  • 사용;여러 명령을 실행합니다(각 매개변수에 대해 별도로),

    예:

    $ 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
    

    명령줄은 선택한 각 파일 이름을 끝에 추가하여 구성됩니다.

    {}이 인스턴스는 명령에 하나만 허용됩니다.

또한보십시오:

답변2

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

답변3

에 따르면 man find:

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

관련 정보