Geralmente, é melhor diretamente, -exec ${tgt_process} \{\} +mas se você precisar obter uma lista de nomes de arquivos delimitada de maneira confiável e confiável em um arquivo ou fluxo, findpor qualquer motivo, poderá fazer o seguinte:
find -exec sh -c 'printf "///%s///\n" "$@"' -- \{\} +
O que você obtém disso são duas seqüências únicas . No início de cada nome de arquivo está a string \n///e na cauda de todo nome de arquivo está a string ///\n. Essas duas seqüências de caracteres não ocorrem em nenhum outro lugar na findsaída de, exceto nessas posições, independentemente dos caracteres que os nomes de arquivos contêm.
Além disso, o uso acima é portátil POSIX básico e pode ser utilizado para trabalhar em praticamente qualquer sistema unix. Isso não se aplica ao uso de um delimitador de byte nulo - apesar de sua conveniência - recomendado por alguns outros.
Mas, novamente, isso só é necessário se você não puder diretamente o -execseu $tgt_processpor qualquer motivo, pois esse deve ser seu objetivo. Por um lado, o método acima ainda requer análise. Por exemplo, se você quisesse cada shell de nome de arquivo citado, primeiro teria que garantir que quaisquer aspas no nome do arquivo fossem escapadas:
find ... + | sed 's|'\''|&"&"&|g;s|///|'\''|g'
Isso gera uma matriz de nomes de arquivos com escape apropriado, independentemente de quais sejam seus caracteres constituintes. Agora você só precisa esperar que seu aplicativo no lado receptor não o altere.