기계적 인조 인간

리눅스에서 Xargs 명령

LINUX Classes || Session - 25: Piping and Importance of tee and xargs commands || By Mr. DURGA Sir

LINUX Classes || Session - 25: Piping and Importance of tee and xargs commands || By Mr. DURGA Sir

차례:

Anonim

xargs 유틸리티를 사용하면 표준 입력에서 명령을 빌드하고 실행할 수 있습니다. 일반적으로 배관을 통해 다른 명령과 함께 사용됩니다.

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

이 자습서에서는 xargs 명령 사용의 기본 사항을 설명합니다.

Linux xargs 명령을 사용하는 방법

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

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

xargs]

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

echo "file1 file2 file3" | xargs touch

위의 예에서 표준 입력을 xargs 로 파이프하고 touch 명령이 각 인수에 대해 실행되어 세 개의 파일을 만듭니다. 다음과 같이 실행하는 것과 같습니다.

touch file1 file2 file3

명령을보고 사용자에게 프롬프트하는 방법

실행하기 전에 터미널에서 명령을 인쇄하려면 -t ( --verbose ) 옵션을 사용하십시오.

echo "file1 file2 file3" | xargs -t touch

touch file1 file2 file3

echo "file1 file2 file3" | xargs -p touch

y 또는 Y 를 입력하여 명령을 확인하고 실행하십시오.

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-str 은 xargs에 전달 된 인수로 바뀝니다.

다음 xargs 예제는 두 개의 명령을 실행합니다. 먼저 touch 사용하여 파일을 만든 다음 ls 명령을 사용하여 파일을 나열합니다.

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

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

replace-str 의 일반적인 선택은 % 입니다. 그러나 다른 자리 표시 자 (예: 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 주소를 핑합니다.

ips.txt

8.8.8.8 1.1.1.1

또한 -L 1 옵션을 사용하여 xargs 가 한 번에 한 줄을 읽도록 지시합니다. 이 옵션을 생략하면 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

find 와 함께 xargs 사용

xargs 는 대부분 find 명령과 함께 사용됩니다. find 를 사용하여 특정 파일을 검색 한 다음 xargs 를 사용하여 해당 파일에 대한 작업을 수행 할 수 있습니다.

줄 바꿈 또는 기타 특수 문자가 포함 된 파일 이름 문제를 피하려면 항상 find -print0 옵션을 사용하십시오. 그러면 find 는 전체 파일 이름과 널 문자를 인쇄합니다. 이 출력은 -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=" Linuxize " VAR2="Linuxize" if]; then echo "Strings are equal." else echo "Strings are not equal." fi ## Using xargs to trim VAR1 if]; then echo "Strings are equal." else echo "Strings are not equal." fi

Strings are not equal. Strings are equal.

결론

xargs 는 Linux에서 명령을 작성하고 실행할 수있는 명령 줄 유틸리티입니다.

xargs 옵션에 대한 자세한 내용은 xargs 매뉴얼 페이지를 참조하십시오.

xargs 터미널