SW/리눅스

Linux : Xargs 사용 방법, 예제, 명령어

얇은생각 2021. 8. 25. 07:30
반응형

xargs 유틸리티를 사용하여 표준 입력에서 명령을 작성하고 실행할 수 있습니다. 일반적으로 pipe를 통해 다른 명령과 함께 사용된다.

xargs를 사용하면 mkdir 및 rm과 같은 명령줄 유틸리티에 표준 입력을 인수로 제공할 수 있습니다.

xargs 명령 사용의 기본 사항에 대해 설명합니다.

 

 

Linux : Xargs 사용 방법, 예제, 명령어

 

 

Linux xargs 명령 사용 방법

xargs는 빈칸이나 새 줄로 구분된 표준 입력에서 인수를 읽고 명령의 인수로 입력을 사용하여 지정된 명령을 실행합니다. 명령이 제공되지 않을 경우 기본값은 /bin/echo입니다.

xargs 명령의 구문은 다음과 같습니다.

xargs [OPTIONS] [COMMAND [initial-arguments]]

 

 

xargs를 사용하는 가장 기본적인 예는 pipe to xargs를 사용하여 공백으로 구분된 여러 문자열을 전달하고 해당 문자열을 인수로 사용할 명령을 실행하는 것이다.

echo "file1 file2 file3" | xargs touch

 

 

위의 예에서, 우리는 표준 입력을 xargs로 배관하고 있으며, 터치 명령은 각 인수에 대해 실행되어 세 개의 파일을 생성한다. 이는 실행과 동일합니다.

touch file1 file2 file3

 

 

 

명령을 보고 사용자에게 확인하는 방법

실행 전에 터미널에 명령을 인쇄하려면 -t(--verbose) 옵션을 사용합니다.

각 명령을 실행하기 전에 실행할지 여부를 묻는 메시지를 표시하려면 -p(--interactive) 옵션을 사용합니다.

echo  "file1 file2 file3" | xargs -t touch

# touch file1 file2 file3

 

 

y 또는 Y를 입력하여 확인하고 다음 명령을 실행합니다.

echo  "file1 file2 file3" | xargs -p touch

# touch file1 file2 file3 ?...y

 

 

이 옵션은 파괴 명령을 실행할 때 유용합니다.

 

 

 

인수 수를 제한하는 방법

기본적으로 명령에 전달된 인수 수는 시스템의 제한에 따라 결정됩니다.

-n(--max-args) 옵션은 지정된 명령에 전달할 인수 수를 지정합니다. xargs는 모든 인수가 모두 사용될 때까지 필요한 횟수만큼 지정된 명령을 실행합니다.

다음 예제에서는 표준 입력에서 읽은 인수 수가 1로 제한됩니다.

아래 상세 출력에서 볼 수 있듯이 터치 명령은 각 인수에 대해 개별적으로 실행됩니다.

echo  "file1 file2 file3" |  xargs -n 1 -t touch

# touch file1
# touch file2
# touch file3

 

 

 

여러 명령을 실행하는 방법

xargs로 여러 명령을 실행하려면 -I 옵션을 사용합니다. -I 옵션 뒤에 replace-str를 정의하고 replace-strar가 모두 xargs에 전달된 인수로 대체됩니다.

다음 xargs 예에서는 두 가지 명령을 실행합니다. 먼저 touch를 사용하여 파일을 생성한 다음 ls 명령을 사용하여 파일을 나열합니다. 

echo "file1 file2 file3" | xargs -t -I % sh -c '{ touch %; ls -l %; }'

# -rw-r--r-- 1 jjeongil users 0 May  6 11:54 file1
# -rw-r--r-- 1 jjeongil users 0 May  6 11:54 file2
# -rw-r--r-- 1 jjeongil users 0 May  6 11:54 file3

 

 

대체 문자열의 공통 선택은 %입니다. 그러나 ARGS와 같은 다른 자리 표시자를 사용할 수 있습니다.

echo "file1 file2 file3" | xargs -t -I ARGS sh -c '{ touch ARGS; ls -l ARGS; }'

 

 

 

구분 기호 지정 방법

-d(--delimiter) 옵션을 사용하여 단일 문자 또는 \로 시작하는 이스케이프 시퀀스가 될 수 있는 사용자 지정 구분 기호를 설정합니다.

다음은 구분 기호로 사용하는 예제입니다.

echo  "file1;file2;file3" | xargs -d \; -t touch

# touch file1 file2 file3

 

 

 

파일에서 항목을 읽는 방법

xargs 명령은 표준 입력 대신 파일에서 항목을 읽을 수도 있습니다. 이렇게 하려면 -a(--arg-file) 옵션과 파일 이름을 차례로 사용합니다. 

다음 예에서는 xargs 명령이 ips.txt와 각 IP 주소 ping을 읽습니다.

# ips.txt

8.8.8.8
1.1.1.1

 

 

또한 Xargs가 한 줄씩 읽도록 지시하는 -L1 옵션을 사용하고 있습니다. 이 옵션을 생략하면 xargs가 모든 IP를 단일 ping 명령으로 전달합니다.

xargs -t -L 1 -a ips.txt ping -c 1

# ping -c 1 8.8.8.8 
# PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
# 64 bytes from 8.8.8.8: icmp_seq=1 ttl=50 time=68.1 ms
# 
# ...
# ping -c 1 1.1.1.1 
# PING 1.1.1.1 (1.1.1.1) 56(84) bytes of data.
# 64 bytes from 1.1.1.1: icmp_seq=1 ttl=59 time=21.4 ms

 

 

 

xargs와 find(찾기)

xargs는 find 명령어와 함께 가장 자주 사용됩니다. 찾기를 사용하여 특정 파일을 검색한 다음 xargs를 사용하여 해당 파일에 대한 작업을 수행할 수 있습니다. 

새 줄이나 다른 특수 문자를 포함하는 파일 이름에 문제가 발생하지 않도록 하려면 항상 find -print0 옵션을 사용하십시오. 이 옵션을 사용하면 find는 전체 파일 이름과 null 문자를 인쇄합니다. 이 출력은 -0, (--null) 옵션을 사용하여 xargs로 올바르게 해석할 수 있습니다.

다음 예에서 find는 /var/www/.cache 디렉토리에 있는 모든 파일의 전체 이름을 출력하여 xargs는 rm 명령으로 파일 경로를 전달합니다.

find /var/www/.cache -type f -print0 | xargs -0 rm -f

 

 

 

xargs를 사용하여 공백 문자 트리밍

xargs는 주어진 문자열의 양쪽에서 공백을 제거하는 도구로 사용될 수도 있습니다.

xargs 명령에 문자열을 연결하기만 하면 트리밍이 수행됩니다.

echo "  Long line " | xargs

# Long line

 

 

셸 스크립트의 문자열을 비교할 때 유용합니다.

#!/bin/bash

VAR1=" Jjeongil "
VAR2="Jjeongil"

if [[ "$VAR1" == "$VAR2" ]]; then
    echo "Strings are equal."
else
    echo "Strings are not equal."
fi

## Using xargs to trim VAR1
if [[ $(echo "$VAR1" | xargs) == "$VAR2" ]]; then
    echo "Strings are equal."
else
    echo "Strings are not equal."
fi

# Strings are not equal.
# Strings are equal.

 

 

xargs는 명령을 빌드하고 실행할 수 있는 Linux의 명령줄 유틸리티입니다.

각 xars 옵션에 대한 자세한 내용은 xars man 페이지를 참조하십시오.

반응형