Geralmente, é melhor usar diretamente -exec ${tgt_process} \{\} +
, mas se precisar obter uma lista de nomes de arquivos confiável e delimitada em um arquivo ou fluxo de find
por qualquer motivo, você pode fazer isso :
find -exec sh -c 'printf "///%s///\n" "$@"' -- \{\} +
O que você ganha com isso são duas strings exclusivas . Na cabeça de cada nome de arquivo está a string \n///
e na cauda de cada nome de arquivo está a string ///\n
. Essas duas strings não ocorrem em nenhum outro lugar na saída de find
, exceto naquelas posições, independentemente de quaisquer caracteres que os nomes de arquivos contenham.
Além disso, o uso acima é portátil POSIX de base e pode ser usado em praticamente qualquer sistema unix. Isso não é verdade para o 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 -exec
your $tgt_process
por qualquer motivo, já que esse deve ser seu objetivo. Por um lado, o método acima ainda requer análise. Por exemplo, se você quisesse que cada shell do nome do arquivo fosse citado, primeiro teria que garantir que as aspas duras no nome do arquivo fossem escapadas:
find ... + | sed 's|'\''|&"&"&|g;s|///|'\''|g'
Isso gera uma matriz de nomes de arquivos com escape de shell propriamente dita, independentemente de quaisquer que sejam seus caracteres constituintes. Agora você só tem que esperar que seu aplicativo no final de recebimento não o atrapalhe.