`ls | xargs wc -l`의 형식이 아름다운 이유는 무엇입니까?

`ls | xargs wc -l`의 형식이 아름다운 이유는 무엇입니까?

wc -l파일만(줄 수) 실행하면 다음이 제공됩니다.

λ wc -l pacman_Qemq.txt
235 pacman_Qemq.txt

그러나 달리기는 다음 ls | xargs wc -l을 제공합니다.

λ ls | xargs wc -l
  242409 pacman_database.tar.bz2
     235 pacman_Qemq.txt
     235 pacman_Qem.txt
     807 pacman_Qeq.txt
     807 pacman_Qe.txt
     376 pacman_Qmq.txt
    2276 pacman_Qnq.txt
    2276 pacman_Qn.txt
    2652 pacman_Qq.txt
    2652 pacman_Qsq.txt
    2652 pacman_Q.txt
  257377 total

어떻게 그래? 왜 이런 일이 total발생합니까? 항목을 정렬해야 하는 이유는 무엇입니까? 각 파일에 대해 개별적으로 실행하면 안 되나요 xargs?wc -l

흥미롭게도 wc -l *동일한 결과가 생성됩니다.

답변1

기본적으로 xargs가능한 한 많은 인수가 단일 명령줄에 전달됩니다. 일반적으로 최대(IIRC) 셸 제한인 256자입니다. 따라서 사용하는 명령은 ls | xargs wc -l기능적으로 와 동일합니다 wc -l *. 귀하가 원하는 동작은 각 파일에 대해 한 번씩 xargs실행되는 것이라고 생각합니다 . 이는 옵션을 wc추가하여 달성할 수 있습니다 .-nls | xargs -n 1 wc -l

관련 정보