Linux / 명령어 / xargs - 표준 입력을 명령 인수로 전달
xargs는 표준 입력에서 항목을 읽어 다른 명령의 인수 목록으로 전달합니다. 파이프 출력이 명령의 입력 데이터가 아니라 파일명 같은 인수가 되어야 할 때 사용합니다.
xargs 명령어란?
기본 구분은 공백·줄바꿈이며 따옴표와 역슬래시도 해석합니다. 따라서 임의의 파일 이름을 처리할 때는 find -print0와 xargs -0을 짝지어 NUL 문자로 안전하게 구분합니다.
기본 문법
생성명령 | xargs [옵션] 실행명령 [고정인수 ...]
설치된 구현과 옵션은 배포판에 따라 다를 수 있습니다. man xargs으로 현재 시스템의 설명을 확인하세요.
사용 예제
값을 인수로 전달
입력 행들을 한 번 이상 묶어 명령에 전달합니다.
printf '%s\n' one two three | xargs printf '%s\n'
파일 이름 안전하게 전달
공백·줄바꿈이 들어간 파일 이름도 NUL 구분으로 보존합니다.
find reports -type f -name '*.txt' -print0 | xargs -0 -r wc -l
한 번에 하나씩 실행
항목별로 별도 실행이 필요하면 -n 1을 사용합니다.
printf '%s\n' alpha beta | xargs -n 1 printf 'item: %s\n'
표준 입력이 인수로 바뀌는 과정
xargs는 입력 항목을 뒤에 지정한 명령의 인수로 전달합니다. -n 1은 항목 하나마다 명령을 한 번 실행합니다.
printf 'one\ntwo\n' | xargs -n 1 printf 'item=%s\n'
예시 출력:
item=one item=two
기본 xargs는 공백·따옴표·역슬래시를 구분자로 해석하므로 공백이나 줄바꿈이 들어간 파일명 목록에는 위험합니다. 파일명을 전달할 때는 생성 명령의 NUL 구분 출력과 xargs -0을 함께 쓰세요. 삭제 같은 변경 명령과 연결하기 전에는 먼저 printf로 전달될 인수를 확인하는 편이 안전합니다.
인수 하나가 공백을 포함하거나 셸 특수 문자가 들어갈 때는 단순 줄바꿈 구분을 안전한 파일명 구분으로 여기면 안 됩니다. 예를 들어 find ... -print0 | xargs -0 ...처럼 두 명령의 구분 방식을 맞춥니다. GNU xargs -r는 입력이 없을 때 뒤 명령을 실행하지 않게 합니다.
주요 옵션과 형식
| 옵션·형식 | 설명 |
|---|---|
-0 |
NUL 문자로 항목을 구분합니다. |
-r |
GNU 구현에서 입력이 비면 실행하지 않습니다. |
-n N |
명령 실행 한 번당 최대 N개 인수를 전달합니다. |
-P N |
최대 N개 명령을 병렬 실행합니다. |
-I 자리표시자 |
입력 항목을 명령의 지정 위치에 대입합니다. |
사용할 때 주의할 점
find ... -print | xargs rm처럼 줄바꿈 기반으로 파일명을 전달하면 공백·개행이 든 이름이 잘못 분리됩니다. 삭제 작업에는 NUL 구분이나 find -exec를 쓰고 대상을 먼저 확인하세요. -P 병렬 실행은 출력 순서와 공유 자원 경쟁을 바꿉니다.
자주 묻는 질문
파이프만 쓰는 것과 xargs는 어떻게 다른가요?
명령1 | 명령2는 명령2의 표준 입력에 전달합니다. xargs는 읽은 값을 명령2의 인수로 구성합니다.
공식 문서
옵션의 정확한 동작과 구현별 차이는 xargs 매뉴얼 페이지에서 확인할 수 있습니다.









