- solusi terbuka -
Jika Anda ingin findmelewatkan konten direktori yang ditemukan, tetapi terus mencari di direktori lain, gunakan -pruneseperti yang disarankan @laebshade. Perintah lengkapnya akan terlihat seperti
find . -type d -name somename -prune -exec ...
Di sisi lain, jika Anda ingin finduntuk sepenuhnya berhenti mencari dan setelah menemukan direktori yang cocok pertama, maka apa yang Anda cari adalah -quit(tersedia sejak versi 4.2.3dari GNU find). Yang ini sedikit lebih rumit untuk digunakan, karena ia findlangsung keluar - jadi -quitharus ditempatkan di bagian paling akhir dari perintah:
find . -type d -name somename -exec ... -quit
Agar ini berfungsi seperti yang diharapkan, kita harus memastikan bahwa -execpengembalian benar (dengan kata lain, status nol ). Jika Anda ingin status keluar -execdiabaikan, sehingga -quitselalu 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 findkerjanya 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, -oopsi mengubah sambungan menjadi "ATAU".
Elemen yang rumit -oadalah yang finddapat "mengoptimalkan" perintah Anda dan tidak menjalankan -execbagian jika Anda mengetikkan saja
find . -type d -name somename -exec ... -o -quit
Untuk mengatasinya, Anda dapat memaksa finduntuk mengevaluasi semua predikat yang digabung dengan "ATAU", dengan melampirkannya di dalam tanda kurung.