우분투 실전 명령어 | xargs로 반복 작업 안전하게 병렬 실행

언제 쓰는가

파일 목록이나 서버 목록을 받아 같은 명령을 반복 실행해야 할 때 xargs가 가장 빠르다.
특히 삭제 전 점검, 로그 수집, 다수 대상 헬스체크처럼 단순 반복 작업을 짧게 끝내고 싶을 때 유용하다.

바로 쓰는 명령어

# 1) 파일 목록을 받아 한 줄씩 sha256 계산
cat files.txt | xargs -I{} sha256sum "{}"

# 2) 공백이 들어간 파일명을 안전하게 처리
find ./logs -type f -name '*.log' -print0 | xargs -0 -I{} gzip "{}"

# 3) 병렬 4개로 API 상태 확인
cat hosts.txt | xargs -I{} -P 4 sh -c 'curl -fsS --max-time 2 "http://{}:8080/health" >/dev/null && echo "{} ok" || echo "{} fail"'
# 4) 삭제 전에 먼저 dry-run처럼 출력만 확인
find ./tmp -type f -mtime +14 -print0 | xargs -0 -I{} echo rm "{}"

# 5) 확인 후 실제 삭제
find ./tmp -type f -mtime +14 -print0 | xargs -0 rm

# 6) 패키지 목록을 받아 설치
cat pkg-list.txt | xargs -r sudo apt-get install -y

핵심 옵션/패턴

  • -0: NUL 구분자를 사용해 공백, 탭, 줄바꿈이 있는 이름도 안전하게 처리한다.
  • -I{}: 입력 항목을 원하는 위치에 치환할 수 있어 복합 명령 작성이 쉽다.
  • -P N: 최대 N개 작업을 병렬로 실행해 시간을 줄인다.
  • -n N: 한 번에 전달할 인자 개수를 제한해 명령 길이 초과를 피한다.
  • -r: 입력이 비어 있으면 명령 자체를 실행하지 않는다.

실무에서는 find -print0와 xargs -0를 기본 조합으로 두고, 병렬은 CPU나 네트워크 여유를 보면서 점진적으로 올리는 방식이 안전하다.

명령 출력 예시

$ cat hosts.txt
10.0.1.11
10.0.1.12
10.0.1.13

$ cat hosts.txt | xargs -I{} -P 3 sh -c 'nc -z -w 1 {} 22 && echo "{} ssh open" || echo "{} ssh closed"'
10.0.1.11 ssh open
10.0.1.12 ssh closed
10.0.1.13 ssh open
$ find ./tmp -type f -mtime +14 -print0 | xargs -0 -I{} echo rm "{}"
rm ./tmp/old-2025-12-01.log
rm ./tmp/old-2025-12-02.log

자주 하는 실수

  • 파일명에 공백이 있는데 -0 없이 xargs를 써서 잘못된 경로가 전달된다.
  • echo로 미리 검증하지 않고 바로 rm을 실행해 복구 비용이 커진다.
  • -P 값을 너무 크게 잡아 디스크 I/O나 대상 서버를 과도하게 압박한다.
  • 실패 코드를 수집하지 않아 일부 작업 실패를 나중에 발견한다.

검증 방법

# xargs가 실제로 어떤 인자를 받는지 확인
printf 'a b\n"c d"\n' | xargs -n1 echo

# 안전한 방식으로 다시 확인
find ./tmp -type f -print0 | xargs -0 -n1 echo

# 병렬 실행 후 실패 여부 점검
cat hosts.txt | xargs -I{} -P 4 sh -c 'nc -z -w 1 {} 22' ; echo $?

검증 단계에서는 반드시 출력만 하는 명령으로 1차 확인한 뒤, 실제 변경 명령으로 넘어가는 순서를 지키는 게 좋다.

운영 팁

배치 작업은 시작 전에 대상 개수를 먼저 세고, 종료 후 성공과 실패 건수를 같이 남기면 장애 분석이 훨씬 빨라진다.
병렬 작업에서는 표준출력이 섞이기 쉬우니 대상 식별자를 함께 출력하는 습관을 들이면 로그 가독성이 크게 좋아진다.

출처

man xargs
GNU findutils manual
Ubuntu Manpages