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