xargs의 다른 -n 플래그 값이 find 명령과 함께 사용될 때 차이가 있습니까?

xargs의 다른 -n 플래그 값이 find 명령과 함께 사용될 때 차이가 있습니까?

누군가가 find 명령을 사용하여 특정 기준과 일치하는 파일을 검색하고 결과를 rm 명령으로 파이프한다고 가정합니다.

find / -type f -name "*.jpg" | xargs rm 

첫째, rm과 같은 명령이 수용할 수 있는 인수 수에 제한이 있는 것 같기 때문에 발견된 파일 수가 많으면 위 명령이 오류를 일으킬지 확실하지 않습니다.

그런 다음 한 번에 rm에 매개변수로 전달할 파일 수를 설정할 수 있다는 것을 알고 있습니다. 예를 들어, -n3을 사용하는 Xargs는 rm ​​실행 명령에 세 개의 인수를 전달하고 모든 파일이 인수로 전달될 때까지 이를 반복합니다.

이제 xargs의 -n 옵션에 대해 다른 값을 사용합니까? 이러한 명령줄은 실행 기간 등 어떤 면에서 다른가요?

find / -type f -name "*.jpg" | xargs rm 

find / -type f -name "*.jpg" | xargs -n1 rm 

find / -type f -name "*.jpg" | xargs -n2 rm 

find / -type f -name "*.jpg" | xargs -n3 rm

.
.
.

find / -type f -name "*.jpg" | xargs -n999 rm  

답변1

언급한 제한 사항은 일반적으로 exec단일 명령에만 국한된 것이 아니라 사용된 버퍼와 관련이 있습니다. 목적 xargs은 정확하게 이 문제를 해결하는 것입니다. xargs명령에는 가능한 한 많은 매개변수가 제공됩니다. 이렇게 하면 명령 호출이 최소화되어 성능이 향상됩니다. 이와 관련하여 명령에 대한 인수 수를 명시적으로 지정하여 줄여도 -n이점이 없습니다 . -n명령에 특정 개수의 인수가 필요한 상황에서는 각 인수에 대해 명령을 한 번 호출할 수 있는 특별한 경우를 사용할 수 있습니다. ( 유사한 동작을 용이하게 하기 위한 find옵션 -exec과 특수 터미네이터 도 있습니다.)+

답변2

비슷한 질문을 했기 때문에 md5sum을 재귀적으로 호출하면 차이가 발생합니다.

time find -type f -print0 | ...
... xargs -0 --max-procs 0 md5sum  37,98s user 2,45s system 99% cpu 40,464 total
... xargs -0 -n100 --max-procs 0 md5sum  41,18s user 2,66s system 327% cpu 13,374 total
... xargs -0 -n10 --max-procs 0 md5sum  45,20s user 2,93s system 573% cpu 8,396 total
... xargs -0 -n1 --max-procs 0 md5sum  45,90s user 3,01s system 591% cpu 8,263 total

find -type f -exec md5sum {} \;  37,87s user 2,62s system 99% cpu 40,596 total

보시다시피 -n 매개변수는 나에게 약간의 속도 향상을 제공한 유일한 것입니다.

관련 정보