No exemplo 2, você está procurando por um determinado texto no file contents
, então você precisa do xargs para passar os nomes dos arquivos para o grep.
No exemplo 1, você está pesquisando a saída de ls, não o conteúdo do arquivo.
na verdade, você pode pesquisar o conteúdo do arquivo sem usar xargs, o que é melhor:
grep -i 'some text' *