의 판단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
+
-exec
POSIX에는 변형이 도입되었습니다 .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
.bash
sed
awk
(실제로 이를 위해서는 파일 및 디렉터리 이름에 개행 문자가 포함되어 있지 않아야 합니다. Bash 및 GNU find, sed, awk 및 xargs는 모두 nul 문자를 \0
구분 기호로 지원하므로 문제 없이 가능한 모든 파일 이름에서 작동할 수 있습니다. )