- giải pháp trần -
Nếu bạn muốn findbỏ 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 -prunenhư @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 findhoà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.3của GNU find). Cái này khó sử dụng hơn một chút, vì nó tạo findra lối thoát ngay lập tức - vì vậy -quitphả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 -exectrả 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 -execbị bỏ qua, để -quitluô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 findhoạ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ý, -otùy chọn thay đổi khớp thành "HOẶC".
Một yếu tố khó khăn -olà findcó thể "tối ưu hóa" lệnh của bạn và không chạy -execphầ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 findphả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.