1. Backgrounds
대량의 파일들에 대해서 Shell 작업을 하다보니, 단순히 iteration 돌면서 처리하는 것은 너무 속도가 느렸습니다.
해서 Shell 에서 병렬처리를 할 수 있나 알아보던 중에 만난 명령어 Xargs 로 성능 개선을 하여, 꽤 빠르게 (10 -> 3초) 정도로 속도 개선을 해내었습니다.
그렇지만 이 명령어가 어떤 역할을 하는지 자세히 알지 못 해 이번에 알아보고 정리해봅니다.
2. Usage
xargs 는 eXtended ARGuments의 약자로,
한 번에 많은 작업을 일괄로 처리할 수 있게 해주는 소프트웨어입니다. 특히, 작업을 병렬로 처리할 수 있는 옵션이 있어 여러 서버에 큰 파일을 동시에 전송하는 작업 등에 매우 효율적입니다.
$ xargs [options] <command> <arguments>
# Examples
$ find . -name "*.tmp" | xargs rm # *.tmp*
$ echo "a b c" | xargs mkdir # default delimiter is space
$ echo "1 2 3 4 5 6" | xargs -n 2 echo
1 2
3 4
5 6
$ echo "a b" | xargs -I {} echo "file_{}"
file_a file_b
# parallel in GNU
cat urls.txt | xargs -n 1 -P 4 curl -O