나는의 의미를 알고 싶어 {} +
의 exec
명령을, 그리고의 차이 무엇인가 {} +
하고 {} \;
. 정확히 말하면,이 둘의 차이점은 무엇입니까?
find . -type f -exec chmod 775 {} +
find . -type f -exec chmod 775 {} \;
답변
사용 ;
(세미콜론) 또는 +
(더하기 기호 것은)에 의해 호출 쉘 명령을 종료하기 위해 필수입니다 -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
명령 행은 선택한 각 파일 이름을 끝에 추가하여 빌드됩니다.
{}
명령 내에서 하나의 인스턴스 만 허용됩니다.
또한보십시오:
답변
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
답변
에 따라 man find
:
-exec 명령 {} + -exec 조치의이 변형은 선택된 파일에서 지정된 명령을 실행하지만 명령 행은 선택한 각 파일 이름을 끝에 추가하여 빌드됩니다. 명령의 총 호출 수는 일치하는 파일 수보다 훨씬 적습니다. 명령 행은 xargs가 명령 행을 빌드하는 것과 거의 같은 방식으로 빌드됩니다. 명령 내에서 하나의 ‘{}’인스턴스 만 허용됩니다. 명령은 시작 디렉토리에서 실행됩니다.