หา -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