Genellikle doğrudan en iyisidir, -exec ${tgt_process} \{\} +ancak herhangi bir nedenle bir dosyada veya akışta güvenilir bir şekilde sınırlandırılmış dosya adları listesi almanız gerekiyorsafind , bunu yapabilirsiniz:
find -exec sh -c 'printf "///%s///\n" "$@"' -- \{\} +
Bundan elde ettiğiniz şey iki benzersiz dizgidir. Her dosya adının başında dize \n///ve her dosya adının kuyruğunda dize bulunur ///\n. Bu iki dize find, dosya adlarının içerdiği karakterlerden bağımsız olarak, bu konumlar dışında, çıktılarında başka hiçbir yerde gerçekleşmez .
Ayrıca, yukarıdaki kullanım temel POSIX taşınabiliridir ve neredeyse tüm unix sistemlerinde çalışmaya güvenilebilir. Bu, bazılarına göre önerilen - boşluğuna rağmen - boş bir bayt sınırlayıcısının kullanımı için doğru değildir.
Ancak, yine, bu sadece herhangi bir nedenle doğrudan -execsizin yapamıyorsanız gereklidir $tgt_process, çünkü bu sizin hedefiniz olmalıdır. Bir kere, yukarıdaki yöntem hala ayrıştırma gerektirir. Örneğin, alıntılanan her dosya adı kabuğunun olmasını istiyorsanız, önce dosya adındaki sabit tırnak işaretlerinin kaçtığından emin olmanız gerekir:
find ... + | sed 's|'\''|&"&"&|g;s|///|'\''|g'
Bu, kurucu karakterleri ne olursa olsun, uygun şekilde kabuktan kaçan bir dosya adı dizisi çıkarır. Şimdi sadece alıcı uçtaki uygulamanızın onu değiştirmeyeceğini ummalısınız.