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
추가하여 달성할 수 있습니다 .-n
ls | xargs -n 1 wc -l