Linux에서 중괄호가 있는 xargs와 없는 경우의 차이점은 무엇입니까?

Linux에서 중괄호가 있는 xargs와 없는 경우의 차이점은 무엇입니까?

이것의 차이점이 무엇인지 알고 싶습니다.

ls | xargs rm
ls | xargs -i{} rm {}

둘 다 나를 위해 일하고 있어요

답변1

xargs rmrm공백이 있는 매개변수로 모든 인수를 호출합니다 .

xargs -i{} rm {}rm {}각 인수에 대해 호출되고 {}현재 인수로 대체됩니다.

2개의 인수가 있는 경우 a.txtand 는 이것을 호출합니다 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 {}

관련 정보