Di solito è meglio direttamente, -exec ${tgt_process} \{\} +
ma se hai bisogno di ottenere un elenco affidabile di delimitati nomi di file in un file o flusso da find
qualsiasi motivo, allora puoi farlo:
find -exec sh -c 'printf "///%s///\n" "$@"' -- \{\} +
Ciò che ne ricava sono due stringhe uniche . Alla fine di ogni nome di file c'è la stringa \n///
e alla fine di ogni nome di file c'è la stringa ///\n
. Queste due stringhe non si verificano in nessun'altra parte find
dell'output tranne che in quelle posizioni indipendentemente dai caratteri che contengono i nomi dei file.
Inoltre, l'utilizzo sopra è portatile POSIX di base e può essere utilizzato per funzionare su quasi tutti i sistemi unix. Ciò non è vero per l'uso di un delimitatore di byte null - nonostante la sua praticità - raccomandato da altri.
Ma, di nuovo, questo è necessario solo se non puoi direttamente il -exec
tuo $tgt_process
per qualsiasi motivo, poiché quello dovrebbe essere il tuo obiettivo. Per prima cosa, il metodo sopra richiede ancora l'analisi. Ad esempio, se si desidera citare ogni shell di nome file, è necessario innanzitutto assicurarsi che le virgolette fisse nel nome file siano state salvate:
find ... + | sed 's|'\''|&"&"&|g;s|///|'\''|g'
Ciò genera una matrice di nomi di file con escape nella shell, indipendentemente da qualunque sia il loro carattere costituente. Ora devi solo sperare che la tua applicazione sul lato ricevente non la rovini.