Katakanlah mungkin ada ratusan *.txt
file dalam direktori. Saya hanya ingin menemukan tiga *.txt
file pertama dan kemudian keluar dari proses pencarian.
Bagaimana cara mencapai ini menggunakan find
utilitas? Saya sudah membaca halaman manualnya dengan cepat, sepertinya bukan pilihan seperti ini.
find . -name '*.txt' -print -quit
hanya menampilkan pertandingan pertama dan membiarkanfind
keluar setelah pertandingan pertama. Saya tidak tahu apakah mungkin untuk beradaptasi dengan kasus "keluar setelah menemukan n cocok".Jawaban:
Anda dapat menyalurkan output
find
melaluihead
:sumber
head
memulai dan menunggu input dari sisi kiri pipa. Kemudianfind
mulai dan mencari file yang sesuai dengan kriteria yang ditentukan, mengirimkan hasilnya melalui pipa. Ketikahead
telah menerima dan mencetak jumlah garis yang diminta, itu berakhir, menutup pipa.find
pemberitahuan pipa tertutup dan juga berakhir. Sederhana, elegan, dan efisien.-n 3
apakah POSIX kompatibel , dan karena itu cenderung lebih portabel.Jawaban lain ini agak cacat. Perintahnya adalah
Lalu ada penjelasan di salah satu komentar [penekanan milik saya]:
Ini adalah hampir benar.
Masalahnya adalah
find
pemberitahuan pipa tertutup hanya ketika mencoba menulis ke dalamnya - dalam hal ini ketika pertandingan ke-4 ditemukan. Tetapi jika tidak ada pertandingan ke-4 makafind
akan dilanjutkan. Shell Anda akan menunggu! Jika itu terjadi dalam skrip, skrip akan menunggu, meskipun faktanya kita sudah tahu output pipa sudah final dan tidak ada yang dapat ditambahkan ke dalamnya. Tidak begitu efisien.Efeknya dapat diabaikan jika ini khusus
find
selesai dengan cepat dengan sendirinya tetapi dengan pencarian kompleks di pohon file besar perintah mungkin tidak perlu menunda apa pun yang ingin Anda lakukan selanjutnya.Solusi yang tidak terlalu sempurna adalah berjalan
Dengan cara ini ketika
head
keluar, shell segera melanjutkan.find
Proses latar belakang dapat diabaikan kemudian (itu akan keluar cepat atau lambat) atau ditargetkan denganpkill
atau sesuatu.Untuk membuktikan konsep Anda dapat mencari
/
. Kami mengharapkan satu pertandingan saja, namunfind
mencarinya di mana-mana dan mungkin membutuhkan banyak waktu.Hentikan dengan Ctrl+ Csegera setelah Anda melihat masalah. Sekarang bandingkan:
sumber