English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
xargs(영문 전체 이름: eXtended ARGuments)는 명령어에 매개변수를 전달하는 필터이자, 여러 명령어를 조합하는 도구입니다.
xargs는 파이프나 표준 입력(stdin) 데이터를 명령행 매개변수로 변환할 수 있으며, 파일의 출력에서 데이터를 읽어들일 수도 있습니다.
xargs는 단一行或多행 텍스트 입력을 다른 형식으로 변환할 수도 있습니다. 예를 들어, 다행 변환, 단행 변환.
xargs의 기본 명령어는 echo입니다. 이는 xargs에 파이프를 통해 전달된 입력이 줄 바꿈과 공백을 포함한다는 것을 의미하며, 그러나 xargs의 처리를 통해 줄 바꿈과 공백은 공백으로 대체됩니다.
xargs는 강력한 명령어로, 하나의 명령어의 출력을 잡아서 다른 명령어에 전달할 수 있습니다.
이 명령어를 사용할 수 있는 이유는 많은 명령어가 | 파이프를 통해 매개변수를 전달하지 않기 때문이며, 일상적인 작업에서 이러한 필요가 있기 때문입니다. 따라서 xargs 명령어가 등장하게 되었습니다. 예를 들어:
find /sbin -perm +700 |ls -l # 이 명령어는 잘못되었습니다 find /sbin -perm +700 |xargs ls -l # 이렇게야 올바르게 합니다
xargs는 일반적으로 파이프와 함께 사용됩니다.
커맨드 형식:
somecommand |xargs -item 커맨드
파라미터:
-a 파일에서 stdin으로 읽어 들입니다
-e flag, 때로는 이렇게 될 수 있습니다-E, flag은 공백으로 구분된 레이블이어야 하며, xargs가 flag 레이블을 포함하는 것을 분석할 때 멈춥니다.
-p 매번 인자를 실행할 때마다 사용자에게 질문합니다.
-n num은 명령어가 실행될 때 한 번에 사용할 argument의 개수를 나타내며, 기본적으로는 모든 것을 사용합니다.
-t은 명령어를 먼저 출력한 후 실행하는 것을 의미합니다.
-i 또는-저는, 이는 Linux가 지원하는지에 따라, xargs의 각 항목 이름을 일반적으로 한 행씩 할당하거나 {}를 대체할 수 있습니다.
-r no-run-if-empty xargs의 입력이 비어 있을 때 xargs를 중지하고 더 이상 실행하지 않습니다.
-s num 명령어 행의 최대 문자 수는, xargs 뒤의 명령어의 최대 명령어 행 문자 수를 의미합니다.
-L num 일차 표준 입력에서 num 행을 command에 전달합니다.
-l 동일 -L.
-d delim 구분자, 기본적인 xargs 구분자는 엔터로, argument 구분자는 공백입니다. 여기서 수정한 것은 xargs의 구분자입니다.
-x exit의 의미는 주로-s 사용.
-P 최대 프로세스 수를 수정합니다. 기본 값은10이면 as many as it can, 이 예제는 생각지 못했지만, 일상에서 사용하지 않을까요.
xargs는 대체 도구로 사용되며, 입력 데이터를 읽고 다시 포맷하여 출력합니다.
다중 행 텍스트 데이터가 포함된 테스트 파일을 정의합니다:
# cat test.txt a b c d e f g h i j k l m n o p q r s t u v w x y z
다중 행 입력 단일 행 출력:
# cat test.txt | xargs a b c d e f g h i j k l m n o p q r s t u v w x y z
-n 옵션 다중 행 출력:
# cat test.txt | xargs -n3 a b c d e f g h i j k l m n o p q r s t u v w x y z
-d 옵션은 사용자 정의 정의 기호를 설정할 수 있습니다:
# echo "nameXnameXnameXname" | xargs -dX name name name name
결합 -n 옵션 사용:
# echo "nameXnameXnameXname" | xargs -dX -n2 name name name name
stdin을 읽고, 포맷된 매개변수를 명령어에 전달합니다
sk.sh 명령어와 매개변수를 저장하는 파일 arg.txt를 가정해 보겠습니다:
#!/bin/bash # sk.sh 명령어 내용, 모든 매개변수를 출력합니다. echo $*
arg.txt 파일 내용:
# cat arg.txt aaa bbb ccc
xargs의 하나의 옵션 -저는 사용 -I는 대체 문자 {}를 지정하며, 이 문자는 xargs 확장 시 대체됩니다.}} -I와 xargs를 함께 사용하면, 각 매개변수 명령어가 한 번씩 실행됩니다:
# cat arg.txt | xargs -I {} ./sk.sh -p {} -l -p aaa -l -p bbb -l -p ccc -l
모든 이미지 파일을 복사합니다 /data/images 디렉토리에:
ls *.jpg | xargs -n1 -I {} cp {} /data/images
xargs와 find를 함께 사용
rm을 사용하여 많은 파일을 삭제할 때, 오류 메시지를 받을 수 있습니다:/bin/rm Argument list too long. xargs를 사용하여 이 문제를 피할 수 있습니다:
find . -type f -name "*.log" -print0 | xargs -0 rm -f
xargs -0 \0을 구분자로 사용합니다.
소스 코드 디렉토리에 있는 모든 php 파일의 줄 수를 계산합니다:
find . -type f -name "*.php" -print0 | xargs -0 wc -l
모든 jpg 파일을 찾고 압축합니다:
find . -type f -name "*.jpg" -print | xargs tar -czvf images.tar.gz
xargs 다른 응용
만약에 많은 다운로드할 URL이 포함된 파일이 있다면, 모든 링크를 다운로드할 수 있습니다:
# cat url-list.txt | xargs wget -c