- solusi terbuka -
Jika Anda ingin find
melewatkan konten direktori yang ditemukan, tetapi terus mencari di direktori lain, gunakan -prune
seperti yang disarankan @laebshade. Perintah lengkapnya akan terlihat seperti
find . -type d -name somename -prune -exec ...
Di sisi lain, jika Anda ingin find
untuk sepenuhnya berhenti mencari dan setelah menemukan direktori yang cocok pertama, maka apa yang Anda cari adalah -quit
(tersedia sejak versi 4.2.3
dari GNU find
). Yang ini sedikit lebih rumit untuk digunakan, karena ia find
langsung keluar - jadi -quit
harus ditempatkan di bagian paling akhir dari perintah:
find . -type d -name somename -exec ... -quit
Agar ini berfungsi seperti yang diharapkan, kita harus memastikan bahwa -exec
pengembalian benar (dengan kata lain, status nol ). Jika Anda ingin status keluar -exec
diabaikan, sehingga -quit
selalu berfungsi, Anda perlu sedikit trik:
find . -type d -name somename \( -exec ... -o -true \) -quit
atau
find . -type d -name somename \( -exec ... -o -quit \)
atau
find . -type d -name somename \( -exec ... , -quit \) # a comma before -quit
- beberapa penjelasan -
Hal terpenting tentang cara find
kerjanya adalah bahwa semua tindakan ("tes") diperlakukan sebagai predikat logis yang ditafsirkan dari kiri ke kanan. Oleh karena itu, tindakan terakhir (misalnya -quit
) hanya akan dilakukan jika seluruh bagian sebelumnya tidak mengembalikan false . Secara default, semua tes digabungkan dengan "DAN" yang logis, -o
opsi mengubah sambungan menjadi "ATAU".
Elemen yang rumit -o
adalah yang find
dapat "mengoptimalkan" perintah Anda dan tidak menjalankan -exec
bagian jika Anda mengetikkan saja
find . -type d -name somename -exec ... -o -quit
Untuk mengatasinya, Anda dapat memaksa find
untuk mengevaluasi semua predikat yang digabung dengan "ATAU", dengan melampirkannya di dalam tanda kurung.