Cari melalui pola tar untuk pola dan cetak path lengkap dari apa yang ditemukan

0

Saya memiliki pohon direktori dengan banyak file tar. Setiap file tar berisi banyak file lainnya. Saya ingin mencari melalui semua file tar untuk pola yang diberikan, dan mencetak path lengkap semua file dalam tar yang ditemukan.

Saya sampai sejauh ini: find . -type f -name '*.tar' -exec tar tf {} \; | egrep '<pattern>'

Sekarang masalah saya adalah bahwa perintah di atas hanya mencetak nama file di dalam tar yang ditemukannya. Yaitu, output di atas adalah:
pattern.jpg foundMe.txt

Saya ingin output berisi juga path lengkap dan nama tar tempat file ditemukan. Bagaimana saya melakukan ini?

Terima kasih!

Yechiel Labunskiy
sumber
Apa pola Anda - hanya menangkap nama file? Bagi saya findmengembalikan path lengkap relatif ke mana saya mengeksekusi perintah secara default.
eebbesen
Ya, find tidak melakukan itu, tetapi kemudian -ex tar tf hanya mengembalikan nama file di dalam arsip tar
Yechiel Labunskiy
Sudahkah Anda mencoba execdir? Lihat pertanyaan ini .
eebbesen
itu tidak membantu, tar tf masih hanya menampilkan nama file, saya perlu menggabungkan jalur file tar dari perintah <find> dengan hasil dari <tar tf | egrep 'pattern'>
Yechiel Labunskiy

Jawaban:

0

Tentu saja, kehilangan alur di suatu tempat di sepanjang garis :$

Saya punya masalah yang sama dengan file jar, mencari kelas java. Digunakan untuk melakukan sesuatu seperti ini: ambil output masing-masing tar tf|grep <pattern>kemudian lihat apakah output mengandung nilai - jika demikian, cetak nama ( $f) dan nilai ( $p):

find . -name '*.tar' -type f|while read f; do p="$(tar tf $f|egrep <pattern>)"; [ -n "$p" ] && echo -e "$f\n$p" ; p=""; done

Beralih urutan argumen temukan - lebih murah untuk melihat nama file sebelum jenis file.

ocurran
sumber
Saya mencari file dalam arsip tar, ini tidak membantu
Yechiel Labunskiy