'+'(더하기)와 ';'의 차이점은 무엇입니까? -exec 명령에서 (세미콜론)?


28

나는 어떤 차이하면 사용 사이에 알고 궁금 +;의 마지막에 -exec내가 사용할 때 명령 find명령?

find .... -exec ... \; 

VS

find .... -exec ... + 

답변:


36

-exec ... \;하나의 항목을 차례로 실행합니다. 따라서 세 개의 파일이 있으면 exec 행이 세 번 실행됩니다.

-exec ... {} +한 번에 여러 개의 파일을 취할 수있는 명령입니다 (예를 들어 cat, stat, ls). 로 찾은 파일 findxargs명령 처럼 묶여 있습니다 . 이는 포크 아웃이 적고 소규모 작업의 경우 상당한 속도 향상을 의미 할 수 있습니다.

다음은 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 대다 그룹으로 작동 할 수 있습니다.


4
예 :로 \;실행 된 명령은입니다 cat 1; cat 2; cat 3. 로 +실행 된 명령은입니다 cat 1 2 3.
Alaa Ali

AFAIK +는 POSIX가 아니므로 Linux 이외의 시스템에서는 사용하지 못할 수 있습니다. 플랫폼을 떠나지 않아도 걱정할 필요는 없지만 Solaris를 사용해야하는지 아는 것이 좋습니다. :)
Simon Richter

오, 정보 감사합니다. 나는 -exec <command> {} ';'타이핑하기가 더 쉽기 때문에 일반적으로 타이핑을 할 수는 있지만 정확한 기술은 없습니다.
hanetzer December

2
@SimonRichter : 아니요, -exec ... {} +POSIX입니다. 참조 : pubs.opengroup.org/onlinepubs/9699919799/utilities/…
cuonglm

@SimonRichter이 -exec ... {} +확장은 2001 년 POSIX 사양에 포함되도록 제안 되었고 2004 년 POSIX 이슈 6으로 비준되었습니다. 이전에 사용하던 Solaris 버전이 POSIX 표준보다 오래된 버전 일 수도 있습니다 (또는 이전 버전 만 대상으로 할 수도 있음).
Oli
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.