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 매뉴얼 페이지에서 확인할 수 있습니다.

같은 카테고리의 다른 글
Linux / 명령어 / ping - 호스트 응답과 왕복 시간 확인

Linux / 명령어 / ping - 호스트 응답과 왕복 시간 확인

Linux ping 명령어의 기능과 기본 문법을 설명합니다. 실제 사용 예제, 주요 옵션과 작업 전 확인할 점을 알아봅니다.

Linux / 명령어 / time - 명령 실행 시간 측정

Linux / 명령어 / time - 명령 실행 시간 측정

Linux time 명령어로 명령과 파이프라인의 실행 시간 및 자원 사용량을 측정하는 방법을 설명합니다. Bash 예약어와 GNU /usr/bin/time의 차이, 출력 저장과 정확한 비교 방법을 정리합니다.

Linux / 명령어 / ls - 파일과 디렉터리 목록 확인

Linux / 명령어 / ls - 파일과 디렉터리 목록 확인

Linux ls 명령어로 파일과 디렉터리 목록, 숨김 파일, 권한과 소유자, 크기 및 수정 시간을 확인하는 방법을 설명합니다. 자주 쓰는 옵션 조합과 정렬 방법, 스크립트에서 ls 출력을 안전하게 다루는 기준도 정리합니다.

Linux / 명령어 / pwd - 현재 작업 디렉터리 경로 확인

Linux / 명령어 / pwd - 현재 작업 디렉터리 경로 확인

Linux pwd 명령어로 현재 작업 디렉터리를 확인하는 방법을 설명합니다. 논리적 경로와 물리적 경로, 셸 내장 명령과 PWD 변수의 차이도 함께 알아봅니다.

Linux / 명령어 / nslookup - DNS 이름과 레코드 조회

Linux / 명령어 / nslookup - DNS 이름과 레코드 조회

Linux nslookup 명령어의 기능과 기본 문법을 설명합니다. 실제 사용 예제, 주요 옵션과 작업 전 확인할 점을 알아봅니다.

Linux / 명령어 / uname - 커널과 시스템 아키텍처 확인

Linux / 명령어 / uname - 커널과 시스템 아키텍처 확인

Linux uname 명령어의 기능과 기본 문법을 설명합니다. 실제 사용 예제, 주요 옵션과 작업 전 확인할 점을 알아봅니다.

Linux / 명령어 / blkid - 블록 장치 UUID와 파일 시스템 형식 조회

Linux / 명령어 / blkid - 블록 장치 UUID와 파일 시스템 형식 조회

Linux blkid 명령어의 기능과 기본 문법을 설명합니다. 실제 사용 예제, 주요 옵션과 작업 전 확인할 점을 알아봅니다.

Linux / 명령어 / apt - Debian·Ubuntu에서 패키지 검색·설치·업데이트

Linux / 명령어 / apt - Debian·Ubuntu에서 패키지 검색·설치·업데이트

Linux apt 명령어의 적용 배포판과 기본 작업을 설명합니다. 패키지 조회·설치 예제, 주요 옵션과 시스템 변경 시 주의점을 알아봅니다.

Linux / 명령어 / curl - URL 요청과 HTTP 응답 확인

Linux / 명령어 / curl - URL 요청과 HTTP 응답 확인

Linux curl 명령어의 기능과 기본 문법을 설명합니다. 실제 사용 예제, 주요 옵션과 작업 전 확인할 점을 알아봅니다.

Linux / 명령어 / rpm - RPM 패키지와 설치 데이터베이스 조회

Linux / 명령어 / rpm - RPM 패키지와 설치 데이터베이스 조회

Linux rpm 명령어의 적용 배포판과 기본 작업을 설명합니다. 패키지 조회·설치 예제, 주요 옵션과 시스템 변경 시 주의점을 알아봅니다.