"-exec ... +"를 사용한 조회가 널리 지원됩니까? [폐쇄]

"-exec ... +"를 사용한 조회가 널리 지원됩니까? [폐쇄]

의 판단GNU findutils 변경 로그최소한 10년 동안(그리고 POSIX의 일부였던 것보다 더 오래) GNU에 있었음에 틀림없으니, 이제 모든 곳에서 지원된다고 가정해도 안전할까요?

또한 어디에 사용될 수 있습니까 xargs? 대안을 옹호해야 할 타당한 이유가 있습니까? (물론 최대 매개변수 수, 병렬성 등을 제어하는 ​​매개변수와 같은 특수 매개변수가 필요한 경우 -exec … +이를 사용합니다 .)xargs

흥미로운 인용문GNU findutil 문서의 일부:

[ 로 찾기 -exec … +]xargs예를 들어 xargs이전 명령이 계속 실행되는 동안 새 명령줄을 구성할 수 있도록 허용하고 여러 명령을 병렬로 실행할 수 있도록 허용하는 등 일부 용도보다 효율성이 떨어질 수 있습니다 . 그러나 이 find ... -exec ... +구조는 이식성이 넓다는 장점이 있습니다. GNU findutils는 -exec ... +버전 4.2.12까지 ' '를 지원하지 않습니다.[2005년 1월];한 가지 이유는 -print0어쨌든 이미 " " 액션이 있기 때문입니다.

답변1

+-execPOSIX에는 변형이 도입되었습니다 .PASC 설명 1003.2 #2102001년에 발행되었으며 6호에서 POSIX 표준과 병합되었습니다(현재 표준에 설명된 대로).find(1)문서). 설명에 따르면 System V Release 4의 모든 파생 제품은 이를 지원하며 HP-UX(2001 - HP-UX 10은 이를 지원하지 않는다는 것을 알고 있음)도 POSIX 6 또는 7 호환 시스템도 지원합니다.

GNU-ism은 실제로 find -print0 | xargs -0일련의 명령입니다. -exec ... +사용 가능하지만 -0지원 되지 않는 경우 xargs전자를 사용하는 것이 더 좋습니다. 요구 사항을 지원하더라도 -0사용하지 않을 이유가 없습니다.-exec ... +

답변2

이제 [ ]가 모든 곳에서 지원된다고 가정해도 안전합니까 -exec ...?

-exec ... '{}' ';'변형은 실행되는 모든 명령에 대해 정확한 일치를 제공하며 이제 POSIX가 아닌 Unix 시스템에서도 어디에서나 확실히 지원됩니다.

변형 -exec ... '{}' +, 잘 모르겠습니다. 실제로 그 정의는 다음과 같습니다.POSIX-1이므로 현재의 모든 POSIXy 시스템이 이를 지원해야 합니다. 그러나 모든 이전 UNIX 시스템(아직 사용 중)이 이를 지원하는지 확실하지 않습니다.

-exec ... '{}' +[ ]를 사용할 수 있을 때 xargs 사용을 옹호해야 할 타당한 이유가 있습니까?

아니 정말. 하나의 명령으로 충분할 때 왜 두 개의 명령을 사용합니까?

문제는 당신이 아는 유일한 도구가 망치뿐이라면 모든 문제는 못처럼 보인다는 것입니다. 의 장점은 목록에서 작동하는 명령을 실행하기 전에 , 등의 작업을 사용하여 목록을 일치시킬 수 있다는 것입니다 xargs.bashsedawk

(실제로 이를 위해서는 파일 및 디렉터리 이름에 개행 문자가 포함되어 있지 않아야 합니다. Bash 및 GNU find, sed, awk 및 xargs는 모두 nul 문자를 \0구분 기호로 지원하므로 문제 없이 가능한 모든 파일 이름에서 작동할 수 있습니다. )

관련 정보