xargs 유틸리티를 사용하여 표준 입력에서 명령을 작성하고 실행할 수 있습니다. 일반적으로 pipe를 통해 다른 명령과 함께 사용된다.
xargs를 사용하면 mkdir 및 rm과 같은 명령줄 유틸리티에 표준 입력을 인수로 제공할 수 있습니다.
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 페이지를 참조하십시오.
'SW > 리눅스' 카테고리의 다른 글
CentOS 7 : TensorFlow 설치 방법, 예제, 명령어 (0) | 2021.08.27 |
---|---|
CentOS 7 : Slack 설치 방법, 예제, 명령어 (0) | 2021.08.26 |
CentOS 7 : yum-cron을 사용하여 자동 업데이트 구성 방법, 예제, 명령어 (0) | 2021.08.23 |
Linux : Bash : String 문자열 비교 방법, 예제, 명령어 (0) | 2021.08.22 |
Linux, 윈도우, MacOS : DNS 캐시 지우는 방법, 예제, 명령어 (0) | 2021.08.21 |