"xargs"명령의 사용 예

설명 및 소개

xargs 명령은 일반적으로 한 명령의 출력이 입력 인수로 다른 명령에 전달되는 명령 행에서 사용됩니다.

대부분의 경우 "파이프"및 "리디렉션"연산자가 동일한 유형의 트랜잭션을 수행하므로 xargs와 같은 특수 명령을 사용하지 않아도됩니다. 그러나 인자가 공백을 포함하고 xargs가 극복하면 기본 파이프 및 리디렉션 메커니즘에 문제가있는 경우가 있습니다.

또한 xargs는 필요한 경우 지정된 명령을 반복적으로 실행하여 모든 인수를 처리합니다. 사실, xargs가 지정된 명령을 실행할 때마다 표준 입력 스트림에서 읽어야하는 인수의 수를 지정할 수 있습니다.

일반적으로 xargs 명령은 데이터가 스트리밍되는 두 번째 명령 (파이프 연산자 "|"사용)의 옵션 또는 인수의 일부로 한 명령의 출력이 사용될 경우 사용해야합니다. 데이터가 두 번째 명령의 (표준) 입력으로 의도 된 경우 정규 배관으로 충분합니다.

예를 들어 ls 명령을 사용하여 파일 이름 및 디렉토리 목록을 생성 한 다음이 목록을 echo를 실행하는 xargs 명령으로 파이프하면 다음과 같이 각 반복에서 echo로 처리되는 파일 이름 또는 디렉토리 이름 수를 지정할 수 있습니다 :

ls | xargs -n 5 echo

이 경우 에코 는 한 번에 5 개의 파일 또는 디렉토리 이름을받습니다. echo 는 끝에 개행 문자를 추가하기 때문에 각 행에 5 개의 이름이 기록됩니다.

추가 처리를 위해 다른 명령으로 전달되는 크고 예측할 수없는 숫자 항목 (예 : 파일 이름)을 반환하는 명령을 실행하는 경우 두 번째 명령이 과부하 및 충돌을 피하기 위해받는 최대 인수 수를 제어하는 ​​것이 좋습니다.

다음 명령 행은 find int로 생성 된 파일 이름의 스트림을 cp 명령에 전달하기 전에 200 그룹으로 분할하여 백업 디렉토리에 복사합니다.

./ -type f -name "* .txt"-print |를 찾습니다. xargs -l200 -i cp -f {} ./backup

find 명령의 "./"요소는 검색 할 현재 디렉토리를 지정합니다. "-type"플래그는 검색을 파일로 제한하고 "-name"* .txt "플래그는".txt "확장자가없는 항목을 더 필터링합니다 .xargs의 -i 플래그는 { } 표기법은 증기의 각 파일 이름을 나타냅니다.

다음 명령은 / tmp 디렉토리 이하의 core 파일을 찾아 삭제합니다.

find / tmp -name core -type f -print | xargs / bin / rm -f

줄 바꿈, 작은 따옴표 또는 큰 따옴표 또는 공백이 포함 된 파일 이름이 있으면이 작업이 잘못 수행됩니다. 다음 버전은 작은 따옴표, 큰 따옴표, 공백 또는 개행을 포함하는 파일 또는 디렉토리 이름이 올바르게 처리되도록 파일 이름을 처리합니다.

/ tmp -name core -type f -print0을 찾으십시오. xargs -0 / bin / rm -f

-i 옵션 대신 -I 플래그를 사용할 수 있습니다.이 플래그는이 예제에서와 같이 명령 인수에서 입력 행으로 대체되는 문자열을 지정합니다.

아일랜드 | xargs -I {} -t mv dir1 / {} dir / {} / code>

대체 문자열은 "{}"로 정의됩니다. 즉, 명령 인수에서 "{}"이 (가) 발생하면 파이프 연산을 통해 arg로 전달 된 입력 요소로 바뀝니다. 이렇게하면 명령 인수에서 특정 위치에 입력 요소를 배치하여 반복적으로 실행할 수 있습니다.