hanya file daftar tar


16

Fakta asyik: Jika Anda menggunakan Archive Manager dan mengekstrak .tar.gz sehingga Anda memiliki "Menjaga struktur direktori" tidak terpelihara, Anda akan mendapatkan tarbomb .

tar -ztfdaftar semua file dan direktori dalam file tar. Apakah ada cara untuk mendaftar semua file dalam file tar, tanpa struktur direktori?


Anda bisa mendapatkan efek 'tarbomb' dengan tar xvzf my_tar.tar.gz --transform 's/.*\///'. Namun sayangnya itu tidak mengubah tampilannya di daftar dengan tdaripada x.
ire_and_curses

4
Yang menggangguku adalah bahwa arsip yang terstruktur dengan baik dapat dengan mudah digunakan untuk membuat senjata ekstraksi massal.
Eero Aaltonen

Jawaban:


17

Saya tidak melihat cara untuk melakukannya dari halaman manual, tetapi Anda selalu dapat memfilter hasilnya. Berikut ini tidak ada baris baru dalam nama file Anda:

tar tzf your_archive | awk -F/ '{ if($NF != "") print $NF }'

Bagaimana itu bekerja

Dengan mengatur pemisah bidang ke /, bidang terakhir awktahu tentang ( $NF) adalah nama file apakah itu memproses nama file atau kosong jika itu memproses nama direktori ( tarmenambahkan garis miring ke nama direktori). Jadi, pada dasarnya kami meminta awkuntuk mencetak bidang terakhir jika tidak kosong.


Pekerjaan yang cukup bagus dengan awk :)
Eero Aaltonen

5

Memanfaatkan Joseph R. satu saran dapat menggunakan regex [^/]$untuk grepuntuk file dengan mencari garis tidak berakhir dengan /.

tar tzf archive.tar.gz | grep -e "[^/]$"


Itu masih keluaran foo/barsebagai lawan dari adil bar. Anda mau grep -Eo '[^/]+$'(dengan GNU grep).
Stéphane Chazelas

4

Dengan asumsi tidak ada nama file yang mengandung baris baru:

tar -tf foo.tar | sed -e 's#.*/##' -e '\#.#!d'

Perintah sed pertama menghapus semuanya sebelum yang terakhir /pada satu baris, sehingga hanya bagian nama file yang dicetak. Perintah kedua menghapus baris yang sekarang kosong, yaitu baris yang diakhiri dengan /, yang merupakan direktori.


sed: -e ekspresi # 2, char 2: perintah tidak dikenal: `/ 'dan sintaks sed tidak terasa sangat .. intuitif
Eero Aaltonen

@ EeroAaltonen saya memperbaiki perintah sed. Memang, sintaksnya agak samar (saya menyertakan penjelasan dalam jawaban saya).
Gilles 'SO- stop being evil'

2

Dengan pax(perintah POSIX untuk membaca tarfile):

pax -'s@.*/@@' < file.tar

(yang mencantumkan semua file terlepas dari jenisnya, termasuk direktori).

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.