为什么`ls | xargs wc -l` 格式漂亮吗?

Mat*_*haq 0 bash xargs

wc -l在文件上单独运行(行数)给出:

? wc -l pacman_Qemq.txt
235 pacman_Qemq.txt
Run Code Online (Sandbox Code Playgroud)

但是运行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
Run Code Online (Sandbox Code Playgroud)

怎么会这样?为什么total会出现?为什么条目对齐?不xargs应该wc -l在每个文件上单独运行吗?

有趣的是,wc -l *产生相同的结果。

Joh*_*ohn 5

默认情况下,xargs将在单个命令行上传递尽可能多的参数 - 通常最多可达 (IIRC) 256 个字符的 shell 限制。因此,您正在使用的命令ls | xargs wc -l, 在功能上等于wc -l *。我相信您期望的行为是为每个文件xargs运行wc一次,这可以通过添加-n选项ls | xargs -n 1 wc -l.