리눅스 명령어 · 5 min read · Sep 20, 2025

리눅스 Xargs 명령어의 초보자를 위한 8가지 실용적인 예제

리눅스 명령어 xargs는 매우 인기 있는 명령줄 도구는 아닐지 모르지만, find 및 grep과 같은 다른 명령어와 결합할 때 매우 유용하다는 사실은 변하지 않습니다. xargs를 아직 모르고 사용법을 이해하고 싶다면, 여기서 바로 그 내용을 다룰 것입니다.

진행하기 전에, 이 튜토리얼에서 제시된 모든 예제가 Ubuntu 22.04 LTS에서 테스트되었다는 점을 유의해 주세요. 제 시스템에서 사용된 셸은 Bash입니다.

1. Xargs 명령어는 어떻게 작동하나요?

우선 사용법에 들어가기 전에 Xargs가 정확히 무엇을 하는지 이해하는 것이 중요합니다. 일반적으로 이 도구는 가장 기본적인 형태로 표준 입력(stdin)에서 데이터를 읽고, 읽은 입력에 따라 명령(인수로 제공된)을 한 번 이상 실행합니다. 입력의 공백과 빈 줄은 구분자로 처리되며, 빈 줄은 무시됩니다.

xargs에 인수로 명령이 제공되지 않으면, 도구가 실행하는 기본 명령은 echo입니다. 예를 들어, 다음 예제에서 저는 ‘xargs’를 실행하고 stdin에 ‘Hello World’를 입력했습니다. Ctrl+D를 눌러 xargs에 입력이 끝났음을 알리자, echo 명령이 자동으로 실행되어 ‘Hello World’가 다시 출력되었습니다.

2. xargs를 다른 명령어와 함께 사용하는 방법은?

echo는 xargs가 실행하는 기본 명령이지만, 다른 명령어를 명시적으로 지정할 수 있습니다. 예를 들어, find 명령과 ‘-name’ 옵션을 인수로 xargs에 전달한 다음, 검색하고자 하는 파일(또는 파일 유형)의 이름을 stdin을 통해 입력으로 전달할 수 있습니다.

여기서 질문의 전체 명령은 다음과 같습니다:

xargs find -name

예를 들어, 우리는 stdin을 통해 입력으로 “*.txt”를 제공했으며, 이는 현재 디렉토리(및 하위 디렉토리)에서 모든 .txt 파일을 검색하고자 함을 의미합니다.

여기서 명령이 실행되는 모습입니다:

3. xargs가 명령을 여러 번 실행하도록 만드는 방법(각 입력 줄/인수마다 한 번씩)

이전 섹션에서 논의한 예제에서는 .txt 파일을 검색하고자 했으므로 입력으로 “*.txt”를 제공했습니다. 하지만 다른 유형의 파일도 검색해야 한다면, 예를 들어 .log 및 .tmp 파일도 검색해야 한다면 어떻게 해야 할까요?

“*.txt” 다음에 이러한 파일을 입력으로 xargs에 제공해 보세요. 그러면 다음과 유사한 오류가 발생할 것입니다:

그 이유는 xargs가 “.txt”와 “.log”를 find 명령에 파일 이름 입력으로 전달하고, find가 입력으로 두 개의 파일 이름으로 실행되면서 실패하기 때문입니다. find 명령이 다음과 같이 실행된다고 생각할 수 있습니다:

find -name "*.txt" "*.log"

그리고 이는 올바른 방법이 아닙니다.

우리가 원하는 것은 xargs 명령이 먼저 “.txt”를 find 명령에 전달하여 find가 .txt 파일과 관련된 결과를 제공하고, 그 다음에 “.log”가 전달되는 것입니다. 이는 xargs가 제공하는 -L 명령줄 옵션을 사용하여 수행할 수 있습니다.

-L 명령줄 옵션은 숫자를 요구하며, 이는 한 번에 명령에 입력으로 전달해야 하는 최대 비어 있지 않은 줄 수로 처리됩니다. 따라서 우리의 경우, 그 값은 1이 됩니다. 왜냐하면 한 번에 find에 입력으로 전달할 입력 줄이 하나만 필요하기 때문입니다.

따라서 우리가 실행해야 할 명령은 다음과 같습니다:

xargs -L 1 find -name

다음 스크린샷은 앞서 언급한 명령이 실행되는 모습을 보여줍니다:

xargs 입력 / 출력

지금까지는 잘 진행되었습니다. 하지만 입력을 다음과 같이 제공하면 어떻게 될까요:

"*.txt" "*.log"

그렇다면 명령이 실패할 것입니다. 왜냐하면 ‘-L 1’이 전체 줄을 find 명령에 전달하도록 보장하기 때문입니다.

이런 상황에서는 ‘-n’ 명령줄 옵션을 사용할 수 있습니다.

‘-n’ 명령줄 옵션은 ‘-L’과 마찬가지로 xargs가 각 명령줄에 전달할 인수의 수를 나타내는 숫자를 요구합니다. 우리가 방금 논의한 경우, “.txt”와 “.log”는 서로 다른 인수여야 하며, 이를 개별적으로 전달하고자 하므로 ‘-n’에 ‘1’을 값으로 제공해야 합니다.

xargs -n 1 find -name

Xargs -n 스위치

따라서 xargs가 명령을 여러 번 실행하도록 만드는 방법은 이와 같습니다.

4. xargs가 공백이 있는 파일 이름을 처리하도록 만드는 방법

초기 단계에서 xargs가 공백(및 줄 바꿈 문자)을 구분자로 처리한다고 언급했습니다. 이는 xargs에 입력으로 전달되는 파일 이름에 공백이 포함된 경우 문제를 일으킬 수 있습니다.

예를 들어, 현재 디렉토리에 ‘new music.mp3’라는 파일이 있고, xargs가 이 이름을 mplayer에 전달하여 재생하도록 하고 싶다고 가정해 보겠습니다. 일반적인 방법으로 진행하면 오류가 발생합니다:

Xargs가 파일 이름의 공백을 처리하는 방법

이는 ‘new’와 ‘music.mp3’ 사이의 공백 때문에 mplayer가 이를 두 개의 다른 파일로 처리하기 때문입니다. 이 문제를 해결하는 한 가지 방법은 입력을 제공할 때 백슬래시를 사용하는 것입니다:

new\ music.mp3

또 다른 방법은 구분자를 변경하는 것입니다. 이는 -d 옵션을 사용하여 수행할 수 있습니다. 예를 들어, xargs에 줄 바꿈만 구분자로 고려하도록 요청할 수 있으며, 이는 다음과 같이 수행할 수 있습니다:

xargs -d '\n' mplayer

xargs -d 스위치

5. xargs가 줄 바꿈 문자가 있는 파일 이름을 처리하도록 만드는 방법

이제 xargs가 공백이 포함된 파일 이름을 처리하는 방법을 알았습니다. 하지만 줄 바꿈 문자는 어떻게 될까요? 네, 파일 이름에 줄 바꿈 문자가 포함될 수 있습니다. 예를 들어, ‘foo’[줄 바꿈]’file.txt’라는 파일이 있습니다. 터미널에서 이름은 ‘foo?file.txt’로 표시됩니다.

이제 find 명령이 ‘foo’로 시작하는 모든 파일을 찾고, 그런 다음 xargs를 사용하여 이러한 파일을 gedit에서 열도록 하고 싶다고 가정해 보겠습니다. 명령은 다음과 같습니다:

find . -name "foo*" | xargs gedit

안타깝게도 이 명령은 목적을 달성하지 못합니다. 왜냐하면 ‘foo’라는 새 파일이 Gedit에서 열리기 때문입니다. 이는 아마도 줄 바꿈 문자가 xargs에 의해 구분자로 처리되기 때문입니다.

이 문제를 해결하려면 find가 제공하는 -print0 옵션을 사용하고 xargs의 -0 옵션과 결합해야 합니다. find의 매뉴얼 페이지는 이 옵션을 다음과 같이 설명합니다:

 -print0  
참; 표준 출력에 전체 파일 이름을 인쇄하고, 널 문자를 뒤따릅니다(줄 바꿈 문자가 아닌). 이는 줄 바꿈이나 다른 유형의 공백을 포함하는 파일 이름이 find 출력을 처리하는 프로그램에 의해 올바르게 해석될 수 있도록 합니다. 이 옵션은 xargs의 -0 옵션에 해당합니다.

따라서 우리가 사용해야 할 명령은 다음과 같습니다:

find . -name "foo*" -print0 | xargs -0 gedit

6. 특정 텍스트가 포함된 파일 찾기

xargs 명령은 특정 텍스트/문자열이 포함된 파일을 검색하려는 경우 매우 유용합니다. 예를 들어, ‘abc’라는 텍스트가 포함된 .txt 파일을 찾고자 한다면, 다음과 같이 수행할 수 있습니다:

find -name "*.txt" | xargs grep "abc"

여기서 명령이 실행되는 모습입니다:

상당히 명백하게도, 이 경우 xargs 명령은 find 명령에서 입력을 받습니다.

7. xargs가 파일에서 입력을 받도록 만드는 방법

지금까지 우리는 xargs가 stdin(기본 동작)에서 입력을 받는 것과 다른 명령에서 입력을 받는 것을 보았습니다(지난 섹션에서 논의됨). 그러나 원한다면 xargs가 파일에서 입력을 받도록 할 수도 있습니다.

명령의 -a 옵션을 사용하면 이를 수행할 수 있습니다. 이 옵션은 파일 이름을 기대하며, 이는 xargs가 입력을 읽을 파일이 됩니다.

예를 들어, ‘input.txt’라는 이름의 파일이 있다고 가정해 보겠습니다. 이 파일에는 xargs에 대한 입력이 포함되어 있습니다(기본적으로 내용은 두 개의 파일 이름: testfile1.txt 및 testfile2.txt입니다). 다음과 같이 xargs를 사용하여 이 파일에서 입력을 읽고, 다른 명령인 ls에 전달할 수 있습니다.

xargs -a input.txt ls -lart

여기서 명령이 실행되는 모습입니다:

8. xargs가 명령을 실행하기 전에 사용자 권한을 요청하도록 만드는 방법

우리는 이미 xargs가 명령을 여러 번 실행하도록 만드는 방법을 논의했습니다(위의 3번 항목 참조). 하지만 xargs가 명령을 실행할 때마다 사용자에게 권한을 요청하도록 하고 싶다면? 이것이 가능할까요? 네, 가능합니다. -p 명령줄 옵션이 이를 가능하게 합니다.

다음은 xargs를 대화형 모드로 실행하는 방법의 예입니다:

우리는 여기서 표면을 긁어내기만 했습니다. xargs 명령은 명령줄 옵션의 형태로 많은 다른 기능을 제공합니다. 이 튜토리얼에서 설명한 xargs 개념/기능을 시도해 보시고, 의문이나 질문이 있는 경우 매뉴얼 페이지를 참조하세요.

Share: X/Twitter LinkedIn

새 게시물을 받은 편지함에서 받기

스팸은 없습니다. 언제든지 구독 해지 가능합니다.