Il est généralement préférable de le faire directement, -exec ${tgt_process} \{\} +mais si vous avez besoin d'obtenir une liste de noms de fichiers délimitée de manière fiable dans un fichier ou un flux findpour une raison quelconque, vous pouvez le faire:
find -exec sh -c 'printf "///%s///\n" "$@"' -- \{\} +
Ce que vous en retirez, ce sont deux chaînes uniques . En tête de chaque nom de fichier se trouve la chaîne \n///et à la fin de chaque nom de fichier se trouve la chaîne ///\n. Ces deux chaînes n'apparaissent nulle part ailleurs dans findla sortie de, à l'exception de ces positions, quels que soient les caractères contenus dans les noms de fichiers.
En outre, l'utilisation ci-dessus est portable POSIX de base et peut être utilisée pour fonctionner sur presque tous les systèmes Unix. Ce n'est pas le cas de l'utilisation d'un délimiteur d'octets nuls - malgré sa commodité - recommandé par certains autres.
Mais, encore une fois, cela n'est nécessaire que si vous ne pouvez pas directement le -execfaire $tgt_processpour une raison quelconque, car cela devrait être votre objectif. D'une part, la méthode ci-dessus nécessite toujours l'analyse. Par exemple, si vous voulez que chaque shell de nom de fichier soit cité, vous devez d'abord vous assurer que les guillemets durs dans le nom de fichier ont été échappés:
find ... + | sed 's|'\''|&"&"&|g;s|///|'\''|g'
Cela génère un tableau de noms de fichiers correctement échappés du shell, quels que soient leurs caractères constitutifs. Il ne vous reste plus qu'à espérer que votre application côté réception ne la gâchera pas.