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?

Eero Aaltonen
sumber
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.

Joseph R.
sumber
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 "[^/]$"

pengguna116835
sumber
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.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
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).

Stéphane Chazelas
sumber