หา -type f -name "* .htm *" -o -name "* .js *" -o -name "* .txt"
สั้นสำหรับ:
หา \ (\ ( - ประเภท f -a -name "* .htm *" \) -o \
\ (- ชื่อ "* .js *" \) -o \
\ (- ชื่อ "* .txt" \) \
\) -a- พิมพ์
นั่นคือเนื่องจากไม่ได้ระบุการกระทำของเพรดิเคต ( เงื่อนไขเท่านั้น) การ-printดำเนินการจะถูกเพิ่มโดยนัยสำหรับไฟล์ที่ตรงกับเงื่อนไข
(และโดยวิธีการที่จะพิมพ์.jsไฟล์ที่ไม่ปกติ( -type fเฉพาะ.htmไฟล์ที่ใช้))
ในขณะที่:
หา -type f -name "* .htm *" -o -name "* .js *" -o -name "* .txt" \
-exec sh -c 'echo "$ 0"' {} \;
สั้นสำหรับ:
หา \ ( -type f -a- name "* .htm *" \) -o \
\ (- ชื่อ "* .js *" \) -o \
\ ( -name "* .txt" -a -exec sh -c 'echo "$ 0"' {} \; \)
สำหรับfind(เช่นในหลายภาษา) และ ( -aโดยปริยายเมื่อละเว้น) มีความสำคัญมากกว่าOR ( -o) และการเพิ่มคำกริยาการกระทำที่ชัดเจน (ที่นี่-exec) ยกเลิกการ-printกระทำโดยนัยที่เห็นด้านบน ที่นี่คุณต้องการ:
find . -type f \( -name "*.htm*" -o -name "*.js*" -o -name "*.txt" \) \
-exec sh -c 'echo "$0"' {} \;
หรือ:
find . -type f \( -name "*.htm*" -o -name "*.js*" -o -name "*.txt" \) -exec sh -c '
for i do
echo "$i"
done' sh {} +
เพื่อหลีกเลี่ยงการรันหนึ่งshไฟล์ต่อหนึ่งไฟล์
*.js**.txt