--- title: xargs — 결과를 인자로 넘겨 실행 date: 2026-10-18 time: 12:00 model: admin category: programs author_type: human summary: 파이프 결과를 다음 명령의 인자로 넘겨 대량 처리하는 도구. tags: 프로그램, 자동화 및 예약 작업, xargs --- **💬 "xargs 명령어"** xargs는 **표준입력을 명령 인자로 변환**합니다. find와 결합해 대량 파일을 처리할 때 필수입니다. -n/-P로 묶음 크기와 병렬 실행을 조절합니다. - **개념**: 입력 줄을 명령 인자로 넘겨 실행합니다. - **-n**: 한 번에 넘길 인자 수를 지정합니다. - **-P**: 병렬 프로세스 수를 지정합니다. - **-I**: 자리표시자로 위치를 지정합니다. ## 자주 쓰는 옵션 | 옵션 | 설명 | | --- | --- | | -n <개수> | 한 번에 넘길 인자 수 | | -P <개수> | 병렬 실행 수 | | -I {} | 자리표시자 사용 | | -0 | NUL 구분자 사용(공백 있는 파일명 안전) | ## 필수 명령어 조합 3가지 - `find /var/log/app -name '*.log' -mtime +14 | xargs -r gzip` — 오래된 로그 압축 - `find /srv/data -type f -print0 | xargs -0 -n 100 md5sum > /tmp/md5.txt` — 공백 있는 파일명 안전하게 체크섬 - `cat hosts.txt | xargs -P 8 -I {} ssh {} 'uptime -p'` — 여러 서버에 병렬로 명령 실행 **💬 "처음 쓰는 사람이 따라하기 쉬운 예시 부탁해"** 실제 운영 중인 서버에서 자주 만나는 상황을 순서대로 정리했습니다. ### 1단계 · 대상 목록 확인 먼저 무엇이 대상인지 봅니다. ``` find /var/log/app -name '*.log' -mtime +14 | head ``` ### 2단계 · 실행 xargs로 넘겨 처리합니다. ``` find /var/log/app -name '*.log' -mtime +14 -print0 | xargs -0 -r gzip ``` ### 3단계 · 검증 결과를 확인합니다. ``` ls -1 /var/log/app/*.gz | wc -l ``` ## 실무에서는 이렇게 씁니다 ### 1. 오래된 로그 압축 **상황** — 14일 지난 로그를 압축해 용량을 줄입니다. ``` find /var/log/app -name '*.log' -mtime +14 -print0 | xargs -0 -r gzip ``` **결과** — 대상 로그가 일괄 압축되어 디스크가 확보됩니다. **포인트** — -print0/-0 조합으로 공백 있는 파일명도 안전하게 처리합니다. ### 2. 여러 서버 병렬 점검 **상황** — 수십 대 서버의 상태를 한 번에 확인합니다. ``` cat hosts.txt | xargs -P 8 -I {} ssh -o ConnectTimeout=3 {} 'uptime -p' ``` **결과** — 병렬로 실행되어 점검 시간이 크게 줄어듭니다. **포인트** — 병렬 수는 대상 부하를 보고 조절합니다. ## 주의할 점 - 공백이 있는 파일명은 -0 없이 처리하면 깨집니다. - 대상이 없을 때 명령이 그대로 실행되지 않도록 -r을 씁니다. - -P로 과도한 병렬 실행은 대상 서버에 부하를 줍니다. - 삭제/변경 작업 전에는 대상 목록을 먼저 확인합니다. ## 실제 실행 화면 오래된 로그를 찾아 일괄 압축하고 결과 개수를 확인한 결과입니다. ![xargs 명령어 실행 결과: 대량 로그 압축](https://games.cursorai.co.kr/assets/xargs-demo.png) 실제 운영 중인 서버 --- 원문(HTML): https://games.cursorai.co.kr/programs/linux/automation/xargs.html