xargs를 사용할 때 공백이 포함된 인수는 어떻게 처리하나요?
_____A: 기본적으로 xargs는 공백(스페이스, 탭, 개행 문자 등)을 구분자로 인수를 분리합니다. 따라서 공백이 포함된 인수를 그대로 전달하려면 적절한 처리가 필요합니다.
공백이 포함된 인수를 처리하는 방법
1. `-0` (또는 `--null`) 옵션 사용하기
입력 데이터를 널 문자(`\0`)로 구분하는 경우 xargs에게 이를 알려주는 옵션입니다. 이렇게 하면 공백이나 특수 문자를 포함한 인수를 안전하게 처리할 수 있습니다.
예:
```bash
printf '%s\0' "file with spaces.txt" "another file.txt" | xargs -0 rm
```
여기서 `printf`로 널 문자로 구분된 파일명을 만들고, `xargs -0`이 이를 안전하게 인식해 `rm` 명령에 전달합니다.
2. `-d` 옵션 사용하기
GNU xargs는 입력 구분자를 직접 지정할 수 있는 `-d` 옵션도 제공합니다. 예를 들어, 쉼표(,)로 구분된 인수를 처리할 때 유용하지만 공백 포함 인수 처리에는 일반적으로 널 문자 방식(`-0`)이 더 안전합니다.
3. 하기 전에 인수를 적절히 인용하거나 이스케이프하기
쉘에서 공백이 포함된 인수를 개별 토큰으로 넘기기 위해 따옴표(`"`, `'`)나 역슬래시(`\`)로 이스케이프할 수 있지만, `xargs` 명령 자체가 입력을 공백으로 토큰화하기 때문에 입력에서 직접 처리하기는 어렵습니다. 따라서 위 `-0` 옵션과 함께 사용하는 것이 권장됩니다.
---
요약:
- 기본 `xargs`는 공백을 구분자로 사용하므로 공백 포함 인수가 여러 개로 분리됨
- 널 문자(`\0`) 구분 방식을 사용하려면 `xargs -0` 옵션과 함께 입력을 준비해야 함
- 쉘에서 단순히 따옴표만 사용하는 것은 충분하지 않으며 `-0` 옵션이 가장 안전한 방법임
---
참고: 파일 목록 생성 시 `find` 명령어를 사용할 땐 `-print0` 옵션과 결합하여 널 문자로 구분된 출력을 만들고, `xargs -0`로 처리하는 방법이 가장 널리 쓰입니다.
```bash
find . -name "*.txt" -print0 | xargs -0 rm
```
기본적으로 `xargs`는 공백이나 줄바꿈을 구분자로 사용하여 인수를 나누기 때문에, 공백이 포함된 인수를 제대로 전달하기 위해서는 적절한 옵션을 사용해야 합니다.
다음은 공백이 포함된 인수를 처리하는 방법입니다.
1. `-0` 옵션 사용 `-0` 옵션을 사용하면, null 문자(`\0`)를 구분자로 사용하여 인수를 전달합니다.
이 경우 입력 데이터는 null로 구분되어야 하므로, 일반적으로 `find` 명령과 함께 사용됩니다.
예를 들어: ```bash find . -name "*.txt" -print0 | xargs -0 command ``` 이렇게 하면 파일 이름에 공백이 포함되어 있어도 올바르게 처리됩니다.
2. 따옴표로 묶기 인수를 따옴표로 묶는 방법도 있습니다.
이 방법은 명령어에 직접 인수를 전달할 때 유용합니다.
예를 들어: ```bash echo "file with space.txt" | xargs command ``` 이 경우 `xargs`는 "file with space.txt"라는 하나의 인수로 인식합니다.
3. `-n` 옵션 사용 `-n` 옵션은 xargs가 한 번에 처리할 인수의 개수를 제한할 수 있는데, 이와 함께 `-d` 옵션을 사용할 수 있습니다.
`-d` 옵션을 사용하여 특정 구분자를 지정하면, 공백을 포함한 인수를 하나의 스트링으로 전달할 수 있습니다.
예를 들어: ```bash echo -e "file with space.txt\nanother file.txt" | xargs -d '\n' command ``` 이 방법은 각 줄이 하나의 인수로 처리되도록 합니다.
요약 공백이 포함된 인수를 `xargs`로 처리할 때는 주로 `-0` 옵션을 이용하는 것이 가장 안전하고 일반적인 방법입니다.
필요에 따라 따옴표로 묶거나, 특정 구분자를 지정하여 사용할 수도 있습니다.
이러한 방법들을 통하여, 공백이 포함된 파일 이름이나 인수를 안전하게 다룰 수 있습니다.
작성자:
최유리 [비회원]
| 작성일자: 1년 전
2025-04-17 07:20:51
조회수: 136 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
조회수: 136 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.