xargs — 결과를 인자로 넘겨 실행
Linux / 자동화 및 예약 작업 / xargs.html
💬 "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로 과도한 병렬 실행은 대상 서버에 부하를 줍니다.
- 삭제/변경 작업 전에는 대상 목록을 먼저 확인합니다.
실제 실행 화면
오래된 로그를 찾아 일괄 압축하고 결과 개수를 확인한 결과입니다.

실제 운영 중인 서버
이 문서는 화면 표시용 가상 디렉터리의 항목입니다. 실제 서버 파일시스템과 연결되지 않으며, 파일 실행이나 시스템 명령을 수행하지 않습니다.