No segundo exemplo, as novas linhas são removidas pelo shell, que divide a palavra na saída da substituição do comando. Como novas linhas são incluídas em IFS
por padrão, elas são tratadas como delimitadores de campo e não como parte dos próprios campos. No primeiro exemplo, a entrada vem de um pipe e não do shell, portanto, o shell não pode fazer a divisão de palavras.
Duplicar a substituição do comando ( "$(find ... )"
) evitará que a divisão de palavras ocorra, mas find
dentro da substituição de comandos é quase sempre uma idéia ruim , então não faça isso. Para segurança máxima, sempre que você tiver acesso às versões GNU das ferramentas Unix, você deve usar as opções de delimitador nulo:
find dir/ -name '...' -print0 | tar cf foo.tar --null --no-recursion -T -