GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana Menghentikan Perintah Temukan Setelah Pertandingan Pertama?

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).


Linux
  1. Bagaimana cara menggunakan perintah nama dasar?

  2. Bagaimana Wildcard * Diinterpretasikan Sebagai Perintah?

  3. Bagaimana Menghitung Jumlah Baris Dalam File Setelah Pertandingan Grep?

  1. Bagaimana cara menemukan Command Invert Match di Solaris

  2. Bagaimana cara cepat mengubah kata pertama dalam perintah Bash?

  3. Bagaimana cara mendapatkan baris ke-n setelah yang ditangkap?

  1. Menemukan File di Command Line (Cara)

  2. Cara mengaudit izin dengan perintah find

  3. Bagaimana Mengintegrasikan Perintah Mv Setelah Menemukan Perintah?