"xargs"의 경우 "-L1"과 "-n 1"이 동일합니까?

"xargs"의 경우 "-L1"과 "-n 1"이 동일합니까?

~에서안전하게 파일 검색 및 삭제

locate  -i nohup.out | xargs -d '\n' -L1 -p rm

Locate 출력의 각 줄은 xargs의 인수로 처리되므로 와 ? 도 -L1동일 합니다.-n 1

답변1

매뉴얼에서:

-L max-lines
명령줄당 최대 max-lines 공백이 아닌 입력 줄을 사용합니다. 후행 공백으로 인해 입력 줄이 논리적으로 다음 입력 줄로 계속됩니다. -x를 의미합니다.

-n max-args
명령줄당 최대 max-args개의 인수를 사용합니다. 크기가 초과되면(-s 옵션 참조), -x 옵션이 제공되지 않는 한 max-args보다 적은 인수가 사용되며, 이 경우 xargs가 종료됩니다.

-d delim
항목은 지정된 문자로 종료됩니다. [...]

이것과 나의 이해를 바탕으로, 귀하의 경우 -L1전달된 인수에서 구분 기호를 공백에서 (개행)으로 변경하여 -n1동등하게 만들고1\n-d

예를 들어, -d인수가 없으면 위치 출력에 공백이 있으면 행이 두 개의 인수로 분할되므로 rm with 의 두 가지 다른 용도가 사용되지만 -n1여전히 하나의 인수와 하나의 명령으로 처리됩니다.-L1

답변2

설명서를 읽어보니 -L필터 에 차이가 있는 것 같습니다.공백이 아닌줄, -n아니. 공백만 포함하는 줄은 출력되지 않는다고 가정하므로 locate이 사용 사례에서는 기능적으로 동일해야 합니다.

답변3

-n공백으로 분할, -L개행으로 분할

따라서 서로 다른 결과가 생성됩니다.

printf '1 2\n3 4\n' | xargs -L1 echo

행별로 분할하므로 다음과 같습니다.

echo 1 2
echo 3 4

출력:

1 2
3 4

하지만:

printf '1 2\n3 4\n' | xargs -n1 echo

공백으로 분할되므로 다음과 같습니다.

echo 1
echo 2
echo 3
echo 4

그리고 다음을 생산합니다:

1
2
3
4

관련된:https://stackoverflow.com/questions/6527004/why-does-xargs-l-yield-the-right-format-while-xargs-n-doesnt

답변4

옵션 -L은 XSI 확장이므로 임베디드 시스템에 있을 필요가 없습니다.

-n 옵션은 기본 표준의 일부이며 항상 유효합니다.

참조 표준을 참조하십시오.http://pubs.opengroup.org/onlinepubs/9699919799/utilities/xargs.html

일부 구현에서는 공백으로 끝나는 줄의 동작을 전환할 수도 있지만, 다른 구현에서는 -L 옵션 지정 여부에 관계없이 공백으로 끝나는 줄을 연결할 수도 있습니다.

관련 정보