xargs에게 어떤 인수를 선택할지 어떻게 알립니까? [복사]

xargs에게 어떤 인수를 선택할지 어떻게 알립니까? [복사]

xargs가 첫 번째 명령의 출력을 두 번째 명령의 매개변수로 리디렉션하고 어떤 매개변수가 출력의 어떤 요소에 해당하는지 선택할 수 있는 방법이 없으면 다음과 같이 한 가지 방법만 있습니다.

ls | xargs file  # there are as many arguments as files in the listing,
                 # but the user does not have too choose himself

이제 선택해야 하는 경우:

ls | xargs file | grep image | xargs mv.....   # here the user has to 
                                               # deal  with two arguments of mv, first for source second for destination, suppose your destination argument is set already by yourself and you have to put the output into the source argument. 

xargs에게 첫 번째 명령의 표준 출력을 두 번째 명령에 대해 선택한 인수로 리디렉션하도록 어떻게 지시합니까?

여기에 이미지 설명을 입력하세요.

답변1

-I에 전달된 매개변수의 각 값으로 대체될 자리 표시자를 정의 할 수 있습니다 xargs. 예를 들어,

ls -1 | xargs -I '{}' echo '{}'

출력에서 echo한 줄에 한 번씩 호출됩니다 . 와 같은 자리 표시자 이기 때문에 많이 사용되는 것을 ls볼 수 있습니다 .'{}'find

귀하의 경우 file일치하는 파일 이름을 추출하기 위해 전처리된 출력도 필요합니다. 거기에 하나가 있기 때문에 grep이를 사용 awk하여 두 가지 작업을 모두 수행하고 file호출을 단순화할 수 있습니다.

file * | awk -F: '/image/ { print $1 }' | xargs -I '{}' mv '{}' destination

GNU가 있는 경우 이를 사용하여 여러 소스 파일을 전달할 mv수 있습니다 .-t

file * | awk -F: '/image/ { print $1 }' | xargs mv -t destination

관련 정보