답변:
-exec ... \;
하나의 항목을 차례로 실행합니다. 따라서 세 개의 파일이 있으면 exec 행이 세 번 실행됩니다.
-exec ... {} +
한 번에 여러 개의 파일을 취할 수있는 명령입니다 (예를 들어 cat
, stat
, ls
). 로 찾은 파일 find
은 xargs
명령 처럼 묶여 있습니다 . 이는 포크 아웃이 적고 소규모 작업의 경우 상당한 속도 향상을 의미 할 수 있습니다.
다음은 10,000 개의 빈 파일을 처리하는 성능 데모입니다.
$ mkdir testdir
$ touch testdir/{0000..9999}
$ time find testdir/ -type f -exec cat {} \;
real 0m8.622s
user 0m0.452s
sys 0m8.288s
$ time find testdir/ -type f -exec cat {} +
real 0m0.052s
user 0m0.015s
sys 0m0.037s
다시 말하지만 여러 파일 이름을 사용할 수있는 명령에서만 작동합니다. 맨 페이지를 보면 명령이 이와 같은 경우 해결할 수 있습니다. 다음은 시놉시스입니다 man cat
.
SYNOPSIS
cat [OPTION]... [FILE]...
생략 부호 [FILE]...
는 둘 이상의 파일을 사용할 수 있음 을 의미합니다.
+
단일 명령에서만 사용할 수 {}
있으며 줄에 정확히 하나 있어야합니다 . \;
여러 개의 0 대다 그룹으로 작동 할 수 있습니다.
+
는 POSIX가 아니므로 Linux 이외의 시스템에서는 사용하지 못할 수 있습니다. 플랫폼을 떠나지 않아도 걱정할 필요는 없지만 Solaris를 사용해야하는지 아는 것이 좋습니다. :)
-exec <command> {} ';'
타이핑하기가 더 쉽기 때문에 일반적으로 타이핑을 할 수는 있지만 정확한 기술은 없습니다.
-exec ... {} +
POSIX입니다. 참조 : pubs.opengroup.org/onlinepubs/9699919799/utilities/…
-exec ... {} +
확장은 2001 년 POSIX 사양에 포함되도록 제안 되었고 2004 년 POSIX 이슈 6으로 비준되었습니다. 이전에 사용하던 Solaris 버전이 POSIX 표준보다 오래된 버전 일 수도 있습니다 (또는 이전 버전 만 대상으로 할 수도 있음).
\;
실행 된 명령은입니다cat 1; cat 2; cat 3
. 로+
실행 된 명령은입니다cat 1 2 3
.