GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara memasukkan pipa | di linux saya temukan -exec perintah?

Pekerjaan menafsirkan simbol pipa sebagai instruksi untuk menjalankan banyak proses dan menyalurkan output dari satu proses ke input dari proses lain adalah tanggung jawab shell (/bin/sh atau yang setara).

Dalam contoh Anda, Anda dapat memilih untuk menggunakan shell tingkat atas untuk melakukan perpipaan seperti ini:

find -name 'file_*' -follow -type f -exec zcat {} \; | agrep -dEOE 'grep'

Dalam hal efisiensi, hasil ini memerlukan satu pemanggilan find, banyak pemanggilan zcat, dan satu pemanggilan agrep.

Ini akan menghasilkan hanya satu proses agrep yang dihasilkan yang akan memproses semua keluaran yang dihasilkan oleh banyak pemanggilan zcat.

Jika karena alasan tertentu Anda ingin memanggil agrep berkali-kali, Anda dapat melakukan:

find . -name 'file_*' -follow -type f \
    -printf "zcat %p | agrep -dEOE 'grep'\n" | sh

Ini membuat daftar perintah menggunakan pipa untuk dieksekusi, lalu mengirimkannya ke shell baru untuk benar-benar dieksekusi. (Menghilangkan "| sh" terakhir adalah cara yang bagus untuk men-debug atau menjalankan baris perintah seperti ini.)

Dalam hal efisiensi, hasil ini memerlukan satu permintaan find, satu permintaan sh, banyak permintaan zcat, dan banyak permintaan agrep.

Solusi paling efisien dalam hal jumlah pemanggilan perintah adalah saran dari Paul Tomblin:

find . -name "file_*" -follow -type f -print0 | xargs -0 zcat | agrep -dEOE 'grep'

... yang memerlukan satu permintaan find, satu permintaan xargs, beberapa permintaan zcat dan satu permintaan agrep.


solusinya mudah:jalankan melalui sh

... -exec sh -c "zcat {} | agrep -dEOE 'grep' " \;

Linux
  1. Cara Menggunakan Perintah find Linux untuk Menemukan File

  2. Cara mem-pipe hasil 'find' ke mv di Linux

  3. Bagaimana saya bisa menemukan versi shell saya menggunakan perintah Linux?

  1. Cara Menemukan Koneksi SSH Aktif di Linux

  2. Cara menggunakan Perintah Su di Linux

  3. Bagaimana cara mem-pipe ke perintah split Linux?

  1. Bagaimana cara mengetahui apa yang dilakukan perintah Linux

  2. Cara Memperbarui Kali Linux Dengan Satu Perintah

  3. Cara Menemukan File dengan Perintah fd di Linux