- giải pháp trần -
Nếu bạn muốn find
bỏ qua nội dung của thư mục tìm thấy, nhưng tiếp tục tìm kiếm trong các thư mục khác, hãy sử dụng -prune
như @laebshade đề xuất. Lệnh đầy đủ sẽ trông giống như
find . -type d -name somename -prune -exec ...
Mặt khác, nếu bạn muốn find
hoàn toàn ngừng tìm kiếm và sau khi tìm thấy thư mục phù hợp đầu tiên, thì thứ bạn đang tìm kiếm là -quit
(có sẵn từ phiên bản 4.2.3
của GNU find
). Cái này khó sử dụng hơn một chút, vì nó tạo find
ra lối thoát ngay lập tức - vì vậy -quit
phải được đặt ở cuối lệnh:
find . -type d -name somename -exec ... -quit
Để điều này hoạt động như mong đợi, người ta phải đảm bảo rằng -exec
trả về đúng (nói cách khác, trạng thái bằng không ). Nếu bạn muốn trạng thái thoát -exec
bị bỏ qua, để -quit
luôn hoạt động, bạn cần một mẹo nhỏ:
find . -type d -name somename \( -exec ... -o -true \) -quit
hoặc là
find . -type d -name somename \( -exec ... -o -quit \)
hoặc là
find . -type d -name somename \( -exec ... , -quit \) # a comma before -quit
- một số giải thích -
Điều quan trọng nhất về cách thức find
hoạt động là tất cả các hành động ("kiểm tra") được coi là các vị từ logic được diễn giải từ trái sang phải. Do đó, hành động cuối cùng (ví dụ -quit
) sẽ chỉ được thực hiện nếu toàn bộ phần trước không trả về false . Theo mặc định, tất cả các bài kiểm tra được nối với "AND" hợp lý, -o
tùy chọn thay đổi khớp thành "HOẶC".
Một yếu tố khó khăn -o
là find
có thể "tối ưu hóa" lệnh của bạn và không chạy -exec
phần đó nếu bạn chỉ gõ
find . -type d -name somename -exec ... -o -quit
Để đối phó với điều đó, bạn có thể buộc find
phải đánh giá tất cả các vị từ được gọi là "HOẶC", bằng cách đặt chúng trong ngoặc đơn.