2026년 상식닷컴 선정 식당 & 카페 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요

xargs를 사용하여 다른 명령의 출력을 인수로 어떻게 전달하나요?

_____
Q: `xargs`를 사용하여 다른 명령어의 출력을 인수(argument)로 전달하려면 어떻게 해야 하나요?

A: `xargs`는 표준 입력으로 받은 데이터를 공백 또는 줄바꿈을 기준으로 분리하여 다른 명령어의 인수로 전달하는 유틸리티입니다. 다음과 같이 사용할 수 있습니다.

1. 기본 형태:
```bash
명령어1 | xargs 명령어2
```
- `명령어1`의 출력이 `xargs`의 입력이 되고, `명령어2`가 이를 인수로 받아 실행됩니다.

2. 예시: 파일 목록을 인수로 전달
```bash
ls *.txt | xargs cat
```
- 현재 디렉토리의 `.txt` 파일 리스트를 `cat` 명령어의 인수로 넘겨 파일들의 내용을 출력합니다.

3. 특정 명령어 옵션과 함께 사용하기
```bash
find . -name "*.log" | xargs grep "에러"
```
- 현재 디렉토리에서 `.log` 확장자를 가진 파일을 찾고, 그 파일들을 `grep "에러"` 인수로 전달하여 내용을 검색합니다.

4. `-I` 옵션으로 자리 표시자 사용
```bash
echo "file1.txt file2.txt" | xargs -n1 -I {} echo 파일 이름: {}
```
- 각 인수를 `{}` 위치에 삽입하여 명령어를 실행합니다. 이 예에서는 각각 파일 이름 앞에 "파일 이름:"을 출력합니다.

5. `-0` 옵션과 `find`의 `-print0` 조합 (공백 문자 포함 파일명 처리)
```bash
find . -name "*.sh" -print0 | xargs -0 chmod +x
```
- 공백, 특수문자가 포함된 파일명을 안전하게 처리할 때 사용합니다.

---

요약:
`xargs`는 파이프로 연결된 출력물을 명령어 인수로 변환해 실행하며,
```bash
명령어1 | xargs 명령어2
```
형태로 활용하고, 복잡한 상황에서는 `-I`, `-n`, `-0` 옵션을 병행해 유연하게 사용할 수 있습니다.
`xargs`는 표준 입력으로 받은 데이터를 다른 명령의 인수로 전달하는 유용한 도구입니다.

이 도구를 사용하면 파이프(`|`)를 통해 값을 넘기고, 이러한 값을 해당 명령어의 인수로 효율적으로 변환할 수 있습니다.

다음은 `xargs`의 기본적인 usage와 몇 가지 예제입니다.

기본 사용법 ```bash command | xargs [options] command_to_execute ``` 예제 1. 파일 목록을 삭제하기 : 특정 디렉토리 내에서 `.tmp` 확장자를 가진 파일을 찾아 삭제할 때, `find`와 `xargs`를 조합할 수 있습니다.

```bash find . -name "*.tmp" | xargs rm ``` 위 명령은 현재 디렉토리와 하위 디렉토리에서 모든 `.tmp` 파일을 찾아서 `rm` 명령을 사용하여 삭제합니다.



2. 이름 바꾸기 : 파일 이름을 변경하는 경우, `echo`와 `xargs`를 사용할 수 있습니다.

```bash echo -e "file1.txt\nfile2.txt" | xargs -I {} mv {} {}.bak ``` 이 예제는 `file1.txt`와 `file2.txt`를 각각 `file1.txt.bak`와 `file2.txt.bak`로 이름을 바꿉니다.



3. 사용자 지정 구분 기호 : 기본적으로 `xargs`는 공백과 새로운 줄을 구분 기호로 사용하지만, `-d` 옵션을 사용하면 다른 구분 기호도 사용할 수 있습니다.

```bash echo "file1,file2,file3" | xargs -d "," -n 1 echo ``` 위 명령은 `file1`, `file2`, `file3`을 각각 별도의 줄로 출력합니다.



4. 병렬 실행 : `-P` 플래그를 사용하여 명령을 병렬로 실행할 수 있습니다.

이는 시간이 오래 걸리는 명령을 더 빠르게 처리할 수 있도록 해 줍니다.

```bash find . -name "*.jpg" | xargs -n 1 -P 4 convert {} -resize 800x800 resized_{} ``` 이 예제는 찾아낸 `.jpg` 파일들을 800x800으로 리사이즈하는 `convert` 명령을 병렬로 4개 프로세스에서 실행합니다.

주의사항 - `xargs`는 입력이 너무 길면 에러가 발생할 수 있습니다.

이 경우 `-0` 옵션을 사용하여 null 문자를 구분 기호로 사용할 수 있습니다.

- `find`와 함께 사용할 때는 `-print0` 옵션도 추가하여 파일 이름에 공백이 포함된 경우에도 안전하게 처리할 수 있습니다.

```bash find . -name "*.tmp" -print0 | xargs -0 rm ``` 이런 방식으로 `xargs`를 활용하면 다양한 명령에 대한 입력을 보다 효율적으로 처리할 수 있습니다.

작성자: 최지안 [비회원] | 작성일자: 1년 전 2025-04-17 07:20:50
조회수: 124 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.