Por favor, consulte a página de manual de ls(1) ! O comando ls leva seus argumentos na linha de comando não na entrada padrão (i. E. Descritor de arquivo 0).
Quando você corre
<SOME_COMMAND> | ls [OPTIONS...]
você instrui o interpretador de comandos a criar um pipe ( | ) da saída padrão do comando esquerdo para a entrada padrão do comando direito (aqui: ls ). Mas ls desconsidera sua entrada padrão e inspeciona seus parâmetros de linha de comando, não encontrando nenhum argumento posicional e listando o diretório de trabalho atual (armazenado na variável de ambiente PWD por interpretadores de shell como Bash). / p>
O xargs(1) leva tokens (delimitado por caracteres de espaço em branco, se não especificado de outra forma) de seu fluxo de entrada padrão e os adiciona como parâmetros à linha de comando de outro comando a ser executado. No seu caso, o comando ls dado a xargs recebe um conjunto de nomes de caminho em sua linha de comando e executa sua tarefa conforme documentado pelo manual.
Bônus: A opção "comando" -ls para GNU find imprimirá os caminhos correspondentes de maneira semelhante a ls -dils (veja find(1) ).