xargs를 사용하는 것이 사용하지 않는 것보다 더 빠르나요?

xargs를 사용하는 것이 사용하지 않는 것보다 더 빠르나요?

이것이 더 빠른가요?

find /tmp -name core -type f | xargs /bin/rm -f

다음을 수행하십시오.

find /tmp -name core -type f -exec /bin/rm -f {} \;

그렇다면 그것을 사용하면 xargs전체 속도가 향상됩니까?

(맨 페이지에서 예제를 가져왔습니다 xargs.)

답변1

Matt가 이미 말했듯이 일반적으로 다음 사실을 알아야 합니다.모든NULbyte(문자열의 끝을 구분하기 때문) 및 the /(경로 요소를 구분하기 때문에) 이외의 문자가 파일 이름에 나타날 수 있습니다 . 따라서 귀하의 xargs예는 (GNU 시스템에서)

find /tmp -name core -type f -print0 | xargs -0 /bin/rm -f

이에 상응하는 것은 -execfind +이지만 \;.

find /tmp -name core -type f -exec /bin/rm -f {} +

이 버전은 각 파일을 호출하지 않고 이전 /bin/rm과 같이 매개변수를 번들로 묶습니다 xargs.

답변2

첫 번째 버전은 아마도 두 번째 버전보다 더 빠를 것입니다. xargs여러 파일을 한 번에 전달 rm하지만 find각 파일에 대해 한 번 호출합니다.rm

따라서 첫 번째 버전에서는 분기/실행 호출을 줄일 수 있습니다.

(일치 항목이 하나만 있거나 전혀 일치하지 않는 경우 두 번째 버전이 더 빠를 수 있습니다. 직접 수행할 필요가 없습니다 xargs.)

하지만 이것이 하나를 선택하는 좋은 기준은 아니라고 생각합니다. 이 특정한 경우에는 이상한 파일 이름에 대해 걱정할 필요가 없지만 일반적으로 걱정해야 합니다. 두 번째 버전이 더 안전하므로 일반적으로 사용하는 것이 좋습니다.

관련 정보