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 个字符的 shell 限制。因此,您使用的命令ls | xargs wc -l
,在功能上等于wc -l *
。我相信您期望的行为是为每个文件xargs
运行wc
一次,这可以通过添加-n
选项ls | xargs -n 1 wc -l
.