find(สำหรับ-name/ เพรดิเคต-pathมาตรฐาน) ใช้รูปแบบสัญลักษณ์แทนเช่น globs (โปรดทราบว่า{a,b}ไม่ใช่ตัวดำเนินการแบบวงกลมหลังจากการขยายคุณจะได้รับสอง globs) ความแตกต่างที่สำคัญคือการจัดการทับ (และจุดไฟล์และ dirs ไม่ได้รับการปฏิบัติเป็นพิเศษในfind) *ใน globs จะไม่ครอบคลุมหลายไดเรกทอรี */*/*จะทำให้รายการไดเรกทอรีมากถึง 2 ระดับ การเพิ่ม-path './*/*/*'จะตรงกับไฟล์ใด ๆ ที่มีความลึกอย่างน้อย 3 ระดับและจะไม่หยุดการแสดงfindรายการเนื้อหาของไดเรกทอรีใด ๆ ที่ระดับความลึกใด ๆ
สำหรับเรื่องนั้นโดยเฉพาะ
./foo*bar/quux[A-Z]{.bak,}/pic[0-9][0-9][0-9][0-9]?.jpg
คู่ของ globs มันง่ายต่อการแปลคุณต้องการไดเรกทอรีที่ระดับความลึก 3 ดังนั้นคุณสามารถใช้:
find . -mindepth 3 -maxdepth 3 \
\( -path './foo*bar/quux[A-Z].bak/pic[0-9][0-9][0-9][0-9]?.jpg' -o \
-path './foo*bar/quux[A-Z]/pic[0-9][0-9][0-9][0-9]?.jpg' \) \
-exec cmd {} +
(หรือ-depth 3มีfindการใช้งานบางอย่าง) หรือ POSIXly:
find . -path './*/*/*' -prune \
\( -path './foo*bar/quux[A-Z].bak/pic[0-9][0-9][0-9][0-9]?.jpg' -o \
-path './foo*bar/quux[A-Z]/pic[0-9][0-9][0-9][0-9]?.jpg' \) \
-exec cmd {} +
ซึ่งจะรับรองได้ว่าสิ่งเหล่านั้น*และ?ไม่สามารถจับคู่/ตัวละคร
( findตรงกันข้ามกับ globs จะอ่านเนื้อหาของไดเรกทอรีอื่นนอกเหนือจากfoo*barที่อยู่ในไดเรกทอรีปัจจุบัน and และไม่เรียงลำดับรายการไฟล์ แต่ถ้าเราทิ้งปัญหาที่สิ่งที่ถูกจับคู่[A-Z]หรือพฤติกรรมของ*/ ?เกี่ยวกับอักขระที่ไม่ถูกต้องคือ ไม่ได้ระบุคุณจะได้รับรายชื่อไฟล์เดียวกัน)
แต่ไม่ว่าในกรณีใด ๆ ตามที่@muru ได้แสดงขึ้นไม่จำเป็นต้องหันไปใช้findถ้าเพียงเพื่อแยกรายการของไฟล์ออกเป็นหลายการทำงานเพื่อหลีกเลี่ยงข้อ จำกัด ของการexecve()เรียกระบบ บางเชลล์เช่นzsh(พร้อมzargs) หรือksh93(พร้อมcommand -x) ยังมีการสนับสนุนในตัวด้วย
ด้วยzsh(ซึ่ง globs ยังมีภาคเทียบเท่า-type fและภาคอื่น ๆ ส่วนใหญ่find) เช่น:
autoload zargs # if not already in ~/.zshrc
zargs ./foo*bar/quux[A-Z](|.bak)/pic[0-9][0-9][0-9][0-9]?.jpg(.) -- cmd
( (|.bak)เป็นผู้ประกอบการทางตรงกันข้าม glob เพื่อ{,.bak}ที่(.)glob คัดเลือกเทียบเท่าของfind's -type fเพิ่มoNในการมีที่จะข้ามการเรียงลำดับเช่นเดียวกับfind, Dจะรวมจุดไฟล์ (ใช้ไม่ได้กับ glob นี้))
¹สำหรับfindการรวบรวมข้อมูลไดเรกทอรีต้นไม้อย่าง globs คุณจะต้องมีสิ่งต่อไปนี้:
find . ! -name . \( \
\( -path './*/*' -o -name 'foo*bar' -o -prune \) \
-path './*/*/*' -prune -name 'pic[0-9][0-9][0-9][0-9]?.jpg' -exec cmd {} + -o \
\( ! -path './*/*' -o -name 'quux[A-Z]' -o -name 'quux[A-Z].bak' -o -prune \) \)
นั่นคือการตัดไดเรกทอรีทั้งหมดที่ระดับ 1 ยกเว้นไดเรกทอรีfoo*barและที่ระดับ 2 ยกเว้นquux[A-Z]หรือไดเรกทอรีquux[A-Z].bakจากนั้นเลือกpic...ไดเรกทอรีที่ระดับ 3 (และตัดไดเรกทอรีทั้งหมดที่ระดับนั้น)
-pathควรจะทำงาน - ยกเว้นว่ามันจะตรงกับ นั่นจะเป็นปัญหาหรือไม่?-ipathfind . -path './foo*bar/quux[A-Z]/pic[0-9][0-9][0-9][0-9]?.jpg'/fooz/blah/bar/quuxA/pic1234d.jpg