`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起こるのですか?アイテムを並べ替える必要があるのはなぜですか?各ファイルに対して個別に実行しないでくださいxargswc -l

興味深いことに、wc -l *同じ結果が生成されます。

ベストアンサー1

デフォルトでは、できるだけ多くの引数が単一xargsのコマンドラインに渡されます。通常、最大(IIRC)シェル制限は256文字です。したがって、使用するコマンドはls | xargs wc -l機能的に同じですwc -l *。あなたが望む動作は、各ファイルに対して一度だけxargs実行されると思います。これはオプションをwc追加することで達成できます。-nls | xargs -n 1 wc -l

おすすめ記事