으로 판단하면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 시스템에서 확실히 지원됩니다. 그러나 모든 이전 유닉스 시스템(아직 사용 중)이 이를 지원하는지 여부는 확실하지 않습니다.
-exec ... '{}' +
[ ]를 사용할 수 있는 경우 대신 xargs를 옹호해야 할 타당한 이유가 있습니까 ?
아니 정말. 하나의 명령으로 충분할 때 왜 두 개의 명령을 사용합니까?
문제는 당신이 아는 유일한 도구가 망치뿐이라면 모든 문제는 못처럼 보인다는 것입니다. 의 장점은 목록에 대해 작동하는 명령을 실행하기 전에 , , 등을 xargs
사용하여 일치 항목 목록을 조작할 수 있다는 사실에서 비롯됩니다 .bash
sed
awk
(실제로 이를 위해서는 파일 및 디렉토리 이름에 개행 문자가 포함되어 있지 않아야 합니다. Bash 및 GNU find, sed, awk 및 xargs는 모두 nul 문자를 \0
구분 기호로 지원하므로 가능한 모든 파일 이름을 조작할 수 없습니다. 문제.)