이것의 차이점이 무엇인지 알고 싶습니다.
ls | xargs rm
ls | xargs -i{} rm {}
둘 다 나를 위해 일하고 있어요
답변1
xargs rm
rm
공백이 있는 매개변수로 모든 인수를 호출합니다 .
xargs -i{} rm {}
rm {}
각 인수에 대해 호출되고 {}
현재 인수로 대체됩니다.
2개의 인수가 있는 경우 a.txt
and 는 이것을 호출합니다 b.txt
.xargs rm
rm a.txt b.txt
하지만 xargs -i{} rm {}
전화할게
rm a.txt
rm b.txt
이는 -i
옵션이 -L 1
옵션을 암시하기 때문입니다. 이는 명령이 매번 rm
한 줄만 사용한다는 의미입니다. 1
그리고 여기서 각 줄에는 인수가 1개만 포함됩니다.
이것을 확인하세요이데온 링크그것에 대해 더 많은 아이디어를 얻으려면.
답변2
-i
옵션( 과 동일 --replace
)은 xargs가 방금 받은 입력을 저장하는 일종의 자리 표시자를 만듭니다. 두 번째 명령에서 자리 표시자는 {}
찾기 옵션처럼 작동합니다 -exec
. 일단 정의되면 xargs는 이 자리 표시자를 전체 입력 줄로 대체합니다. 이름 이 마음에 들지 않으면 {}
직접 정의할 수 있습니다.
ls | xargs -iPLACEHOLDER echo PLACEHOLDER
귀하의 경우 두 명령 모두 동일한 결과를 생성합니다. 두 번째 형식에서는 옵션을 사용하여 기본 동작을 명시적으로 만듭니다 -I
.
답변3
중괄호를 사용하면 파일당 하나의 프로세스가 생성됩니다 rm
. 중괄호가 없으면 xargs
각 명령에 가능한 한 많은 파일 이름을 전달합니다 rm
.
비교하다
ls | xargs echo
그리고
ls | xargs -I {} echo {}