Apakah ada cara untuk memaksa find perintah untuk berhenti tepat setelah menemukan kecocokan pertama?
Jawaban yang Diterima:
Dengan GNU atau FreeBSD find , Anda dapat menggunakan -quit predikat:
find . ... -print -quit
NetBSD find setara:
find . ... -print -exit
Jika yang Anda lakukan hanyalah mencetak nama, dan dengan asumsi nama file tidak mengandung karakter baris baru, Anda dapat melakukan:
find . ... -print | head -n 1
Itu tidak akan menghentikan find setelah pertandingan pertama, tetapi mungkin, tergantung pada waktu dan buffering pada pertandingan kedua atau (banyak) kemudian. Pada dasarnya, find akan diakhiri dengan SIGPIPE ketika mencoba mengeluarkan sesuatu saat head sudah hilang karena telah membaca dan menampilkan baris input pertama.
Perhatikan bahwa tidak semua shell akan menunggu find perintah setelah head telah kembali. Shell Bourne dan implementasi AT&T dari ksh (bila non-interaktif) dan yash (hanya jika pipa itu adalah perintah terakhir dalam skrip) tidak, membiarkannya berjalan di latar belakang. Jika Anda lebih suka melihat perilaku itu di shell apa pun, Anda selalu dapat mengubah yang di atas menjadi:
(find . ... -print &) | head -n 1
Jika Anda melakukan lebih dari sekadar mencetak jalur file yang ditemukan, Anda dapat mencoba pendekatan ini:
find . ... -exec sh -c 'printf "%sn" "$1"; kill "$PPID"' sh {} ;
(ganti printf dengan apa pun yang akan Anda lakukan dengan file itu).
Itu memiliki efek samping find mengembalikan status keluar yang mencerminkan fakta bahwa itu terbunuh.
Sebenarnya, menggunakan sinyal SIGPIPE sebagai ganti SIGTERM (kill -s PIPE bukannya kill ) akan menyebabkan beberapa shell lebih diam tentang kematian itu (tetapi akan tetap mengembalikan status keluar bukan nol).