GNU/Linux >> Belajar Linux >  >> Linux

Mencetak Nama File Bersama Dengan Hasil Grep Di Temukan -exec?

Saya memiliki program bernama foo yang ingin saya jalankan pada setiap hasil yang ditemukan melalui find. Jadi kira-kira seperti ini:

find . -name '*.o' -type f -exec foo {} ;

Saya ingin mengambil output dari semua pemanggilan foo untuk string bar tertentu. Jadi saya menambahkan ini:

find . -name '*.o' -type f -exec foo {} ; | grep bar

Tapi saya kehilangan informasi asli tentang file apa yang cocok dengan itu. Saya mencoba menambahkan -fprintf /dev/stderr '%pn' ke find perintah tetapi sekarang sepertinya stdout hilang, karena tidak ada hasil grep yang dicetak.

Bagaimana saya bisa mendapatkan setiap nama file yang dicetak ke output dan KEMUDIAN memiliki hasil grep yang sesuai dengan file yang dicetak setelahnya?

Atau, jika ada cara untuk membuat -H argumen grep pekerjaan itu juga akan baik-baik saja, tetapi seperti yang tertulis itu tidak akan berfungsi karena saya hanya meneruskan teks dari stdin, dan grep tidak tahu nama filenya. Saya mencoba berbagai mantra xargs , tapi saya juga tidak bisa melakukannya.

Jawaban yang Diterima:

Untuk mendapatkan setiap nama file yang dicetak ke output dan KEMUDIAN memiliki hasil grep yang sesuai dengan file yang dicetak setelahnya, Anda bisa membungkus -exec foo {} | grep pipa dalam cangkang:

find . -name '*.o' -type f -print -exec sh -c 'foo "$1" | grep "bar"' sh {} ;

Untuk membuat -H argumen grep berfungsi dengan input standar, jika versi grep . Anda mendukung --label= pilihan yang bisa Anda lakukan

find . -name '*.o' -type f -exec sh -c '
  foo "$1" | grep -H --label="$1" "bar"
' sh {} ;

atau (jika temuan Anda mendukung + alternatif multi-argumen untuk ; ):

find . -name '*.o' -type f -exec sh -c '
  for f; do foo "$f" | grep -H --label="$f" "bar"; done
' sh {} +

Linux
  1. Grep Rekursif Vs Temukan / -type F -exec Grep {}; Mana yang Lebih Efisien/Lebih Cepat?

  2. Du Hasil Pada Sistem File Tidak Konsisten Dengan Df?

  3. Temukan -exec + Vs Temukan | Xargs:Yang Mana Yang Harus Dipilih?

  1. Keluar Dari Temukan Jika -exec Gagal?

  2. Tangkap Grup Dengan Awk Atau Grep?

  3. Nama file tidak tercetak dengan benar dengan garis bawah _ di Bash

  1. Grep Dengan Operator Logika?

  2. Menghilangkan Ekstensi Dengan Temukan?

  3. Mendapatkan Opsi -exec Di Temukan Untuk Bekerja?