By default, `xargs` will pass as many parameters on a single command line as it can - usually up to the shell limit of (IIRC) 256 characters. So the command you're using, `ls | xargs wc -l`, is functionally equal to `wc -l *`. The behavior I believe you're expecting is for `xargs` to run `wc` once for each file, which can be produced by adding the `-n` option, `ls | xargs -n 1 wc -l`.