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 / 명령어 / printf - 지정한 형식으로 값 출력

Linux / 명령어 / printf - 지정한 형식으로 값 출력

Linux printf 명령어의 기본 문법과 실제 사용 예제를 설명합니다. 주요 옵션과 결과를 해석할 때 주의할 점을 확인할 수 있습니다.

Linux / 명령어 / ssh-copy-id - SSH 공개키를 원격 계정에 등록

Linux / 명령어 / ssh-copy-id - SSH 공개키를 원격 계정에 등록

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

Linux 강좌 / 파일과 디렉터리 관리 - 생성·복사·이동·삭제

Linux 강좌 / 파일과 디렉터리 관리 - 생성·복사·이동·삭제

실습 폴더에서 파일과 디렉터리를 만들고 복사·이동·삭제해 봅니다. 덮어쓰기와 삭제 전에 경로와 결과를 확인하는 습관도 익힙니다.

Linux / 명령어 / sftp - SSH로 안전하게 파일 전송

Linux / 명령어 / sftp - SSH로 안전하게 파일 전송

Linux sftp 명령어로 SSH 기반 파일을 업로드하고 다운로드하는 방법을 설명합니다. 경로 구분, 전송 재개, 공개 키 인증, 배치 자동화와 보안 점검 사항을 정리합니다.

Linux 강좌 / 셸의 명령 실행 방식 - ;, &&, ||, 별칭과 환경 변수

Linux 강좌 / 셸의 명령 실행 방식 - ;, &&, ||, 별칭과 환경 변수

Bash가 명령을 해석하고 종료 상태에 따라 다음 명령을 실행하는 방식을 알아봅니다. ;, &&, ||와 별칭·환경 변수의 차이를 안전한 예제로 설명합니다.

Linux / 명령어 / last - 로그인 기록과 시스템 부팅 이력 확인

Linux / 명령어 / last - 로그인 기록과 시스템 부팅 이력 확인

Linux last 명령어로 사용자 로그인·로그아웃, 재부팅과 실패한 로그인 이력을 확인하는 방법을 설명합니다. wtmp·btmp, 기간 필터, 상태 해석과 보안 조사 시 한계를 함께 정리합니다.

Linux / 명령어 / comm - 정렬된 두 파일의 공통·고유 행 비교

Linux / 명령어 / comm - 정렬된 두 파일의 공통·고유 행 비교

Linux comm 명령어의 기본 문법과 실제 사용 예제를 설명합니다. 주요 옵션과 결과를 해석할 때 주의할 점을 확인할 수 있습니다.

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

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

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

Linux 강좌 / systemd 서비스와 부팅 로그 확인하기

Linux 강좌 / systemd 서비스와 부팅 로그 확인하기

리눅스 부팅 흐름과 systemd 유닛을 이해하고 서비스의 실행 상태와 자동 시작 설정을 구분합니다. systemctl과 journalctl로 상태·부팅 로그를 확인합니다.

Linux / 명령어 / fmt - 일반 텍스트 문단의 줄바꿈 조정

Linux / 명령어 / fmt - 일반 텍스트 문단의 줄바꿈 조정

Linux fmt 명령어의 기본 문법과 실제 사용 예제를 설명합니다. 주요 옵션과 결과를 해석할 때 주의할 점을 확인할 수 있습니다.