โดยปกติแล้วจะเป็นการดีที่สุดโดยตรง-exec ${tgt_process} \{\} +
แต่ถ้าคุณต้องการรับรายการชื่อไฟล์ที่คั่นด้วยความน่าเชื่อถือในไฟล์หรือสตรีมfind
ด้วยเหตุผลใดก็ตามคุณสามารถทำสิ่งนี้ได้:
find -exec sh -c 'printf "///%s///\n" "$@"' -- \{\} +
สิ่งที่คุณจะได้รับจากสิ่งนั้นคือสองสายที่มีเอกลักษณ์ ที่หัวของทุกชื่อไฟล์เป็นสตริงและหางของทุกชื่อไฟล์เป็นสตริง\n///
///\n
สตริงสองตัวนี้จะไม่เกิดขึ้นที่อื่นในfind
เอาต์พุตยกเว้นในตำแหน่งเหล่านั้นโดยไม่คำนึงถึงอักขระใด ๆ ที่ชื่อไฟล์บรรจุอยู่
นอกจากนี้การใช้งานดังกล่าวข้างต้นเป็นพื้นฐาน POSIX แบบพกพาและสามารถพึ่งพาเพื่อทำงานกับระบบยูนิกซ์เกือบทุกชนิด สิ่งนี้ไม่เป็นความจริงในการใช้ตัวคั่นแบบ null ไบต์แม้ว่าจะมีความสะดวกสบายก็ตาม แต่ก็แนะนำโดยผู้อื่น
แต่อีกครั้งสิ่งนี้จำเป็นเฉพาะถ้าคุณไม่สามารถบอกเหตุผล-exec
ของคุณไม่ตรง$tgt_process
ตามที่ควรเป็นเป้าหมายของคุณ สำหรับสิ่งหนึ่งวิธีการข้างต้นยังคงต้องแยกวิเคราะห์ ตัวอย่างเช่นหากคุณต้องการให้แต่ละเชลล์ชื่อไฟล์อ้างถึงก่อนอื่นคุณต้องตรวจสอบให้แน่ใจว่าได้ใส่เครื่องหมายคำพูดอย่างหนักในชื่อไฟล์แล้ว:
find ... + | sed 's|'\''|&"&"&|g;s|///|'\''|g'
ซึ่งจะส่งออกอาร์เรย์ของชื่อไฟล์ที่ใช้งานได้อย่างเหมาะสมโดยไม่คำนึงว่าอักขระที่เป็นองค์ประกอบอาจเป็นอะไร ตอนนี้คุณเพียงแค่หวังว่าใบสมัครของคุณในตอนท้ายของการรับจะไม่ถูกรวมไว้