> 환경 및 유틸리티 > xargs

xargs -I: 입력 항목을 명령 인자로 변환

xargs는 표준 입력에서 읽은 항목들을 다른 명령어의 인자로 변환하여 실행하는 강력한 유틸리티입니다. 특히 -I 옵션은 입력된 각 줄을 지정된 플레이스홀더 문자열로 대체하여 명령어를 실행할 수 있게 해주며, 이는 파일 이름에 공백이나 특수 문자가 포함된 경우에도 안전하게 명령을 처리하는 데 매우 유용합니다.

개요

xargs는 파이프(|)를 통해 전달된 표준 입력을 받아, 이를 다른 명령어의 인자로 변환하여 실행합니다. -I 옵션은 입력의 각 줄을 지정된 플레이스홀더 문자열로 대체하여 명령어를 실행할 때 유용하며, 이는 특히 파일 이름에 공백이나 특수 문자가 포함된 경우에도 안전하게 처리할 수 있게 해줍니다.

주요 특징

  • 입력 항목을 다른 명령어의 인자로 변환
  • 플레이스홀더를 이용한 유연한 명령 실행 (-I)
  • 공백 및 특수 문자가 포함된 파일명 안전 처리
  • 병렬 처리 지원 (-P)

주요 옵션

xargs 명령어는 다양한 옵션을 제공하지만, -I 옵션과 함께 자주 사용되는 주요 옵션들을 소개합니다.

플레이스홀더 및 입력 처리

실행 제어

생성된 명령어:

명령어를 조합해 보세요.

설명:

`xargs` 명령어를 실행합니다.

위 옵션들을 조합하여 AI와 함께 가상으로 명령어를 실행해 보세요.

사용 예시

xargs -I 옵션을 활용한 다양한 명령어 사용 예시입니다.

찾은 파일들을 특정 디렉토리로 이동

find . -name "*.txt" -print0 | xargs -0 -I {} mv {} /tmp/new_dir

현재 디렉토리에서 '.txt' 확장자를 가진 모든 파일을 찾아 '/tmp/new_dir'로 이동합니다. 파일명에 공백이 있어도 안전하게 처리됩니다.

특정 문자열을 포함하는 파일 내용 변경

grep -l "old_text" *.txt | xargs -I {} sed -i 's/old_text/new_text/g' {}

현재 디렉토리의 모든 '.txt' 파일에서 'old_text'를 'new_text'로 변경합니다. -l 옵션은 파일명만 출력합니다.

공백이 포함된 파일명 삭제

find . -name "my file.txt" -print0 | xargs -0 -I {} rm {}

파일명에 공백이 포함된 'my file.txt' 파일을 안전하게 삭제합니다. -print0과 -0 옵션의 조합이 중요합니다.

각 파일에 대해 별도의 명령 실행

ls *.log | xargs -I file_name echo "Processing file: file_name"

현재 디렉토리의 모든 '.log' 파일에 대해 'Processing file: [파일명]' 메시지를 출력합니다.

팁 & 주의사항

xargs -I 옵션을 사용할 때 유용한 팁과 주의할 점입니다.

xargs -I vs xargs -0

두 옵션 모두 입력 항목을 처리하지만 방식이 다릅니다.

  • -I (replace-str): 입력의 각 '줄'을 플레이스홀더로 대체합니다. 줄바꿈 문자로 구분되므로, 파일명에 줄바꿈이 포함된 경우 문제가 발생할 수 있습니다.
  • -0: 입력 항목이 널(null) 문자로 구분됨을 가정합니다. 'find -print0'과 함께 사용하면 파일명에 공백, 줄바꿈, 특수 문자가 포함되어도 가장 안전하게 처리할 수 있습니다.

rm 명령어와 함께 사용할 때 주의

xargs를 사용하여 'rm' 명령어를 실행할 때는 매우 주의해야 합니다. 실수로 중요한 파일을 삭제할 수 있으므로, 먼저 'echo'나 '-t' 옵션을 사용하여 실행될 명령어를 확인하거나, 'rm -i'와 같이 대화형 옵션을 사용하는 것을 고려하십시오.

병렬 처리 활용 (-P)

대량의 파일이나 시간이 오래 걸리는 작업을 처리할 때 '-P' 옵션을 사용하여 여러 프로세스를 동시에 실행하면 작업 시간을 크게 단축할 수 있습니다. 예를 들어, 'xargs -P 4'는 4개의 프로세스를 병렬로 실행합니다.


동일 카테고리 명령어