tìm thấy . -type f -name "* .htm *" -o -name "* .js *" -o -name "* .txt"
là viết tắt của:
tìm thấy . \ (\ ( -type f -a -name "* .htm *" \) -o \
          \ ( -name "* .js *" \) -o \
          \ ( -name "* .txt" \) \
       \) -Một bản in
Đó là bởi vì không có biến vị ngữ hành động nào được chỉ định (chỉ điều kiện ), nên một -printhành động được thêm vào cho các tệp khớp với các điều kiện.
(và, nhân tiện, điều đó sẽ in các .jstệp không thường xuyên ( -type fchỉ áp dụng cho .htmcác tệp)).
Trong khi:
tìm thấy . -type f -name "* .htm *" -o -name "* .js *" -o -name "* .txt" \
  -exec sh -c 'echo "$ 0"' {} \;
là viết tắt của:
tìm thấy . \ ( -type f -a -name "* .htm *" \) -o \
       \ ( -name "* .js *" \) -o \
       \ ( -name "* .txt" -a -exec sh -c 'echo "$ 0"' {} \; \)
Vì find(như trong nhiều ngôn ngữ), AND ( -a; ẩn khi bị bỏ qua) được ưu tiên hơn OR ( -o) và thêm một vị từ hành động rõ ràng (ở đây -exec) hủy bỏ -printhành động ngầm nhìn thấy ở trên. Ở đây, bạn muốn:
find . -type f \( -name "*.htm*" -o -name "*.js*" -o -name "*.txt" \) \
  -exec sh -c 'echo "$0"' {} \;
Hoặc là:
find . -type f \( -name "*.htm*" -o -name "*.js*" -o -name "*.txt" \) -exec sh -c '
   for i do
     echo "$i"
   done' sh {} +
Để tránh chạy một shtệp trên mỗi tệp.
               
              
*.js*hoặc*.txt.