Apakah tar -tvf mendekompresi file atau hanya daftar nama?

9

Saya memiliki tar.gzfile 32 GB. Saya mencoba untuk mengekstrak folder tertentu dari itu jadi saya daftar isinya dengan perintah berikut untuk melihat struktur file:

tar -tvf file.tar.gz > files.txt

Tampaknya butuh selamanya untuk membuat daftar semua file. Pertanyaan saya adalah apakah flag -t mengekstrak file juga? Saya tahu itu tidak mengekstrak pada disk tetapi jumlah waktu yang dibutuhkan membuat saya bertanya-tanya apakah itu benar-benar memprosesnya dalam semacam buffer.

Saif
sumber
3
@smci: Terdeteksi secara otomatis, jadi tidak terlalu dilupakan.
Ry-

Jawaban:

14

file tar.gz tidak memiliki indeks. Tidak seperti zip atau format arsip lainnya, tidaklah sepele atau murah untuk mendapatkan daftar file yang terkandung atau metadata lainnya. Untuk menunjukkan kepada Anda file mana yang terkandung dalam arsip, tar memang perlu mengompres arsip dan mengekstrak file, meskipun dalam kasus -topsi itu hanya dalam memori.

Jika pola umum dalam kasus penggunaan Anda adalah untuk mencantumkan file yang ada dalam arsip, Anda mungkin ingin mempertimbangkan untuk menggunakan format arsip yang dapat menambahkan indeks file ke file terkompresi, misalnya zip.

Mungkin Anda juga ingin melihat format HDF5 untuk skenario yang lebih kompleks.

Pengukuran

Saya hanya perlu melakukan beberapa pengukuran untuk membuktikan jawaban saya dan membuat beberapa direktori dengan banyak file di dalamnya dan mengemasnya di mana keduanya, tar czf files#.tgz files#dan zip -r files#.zip files#.

Untuk pengujian saya menjalankan perintah unpacking dua kali setiap kali dan mengambil hasil dari menjalankan kedua, untuk menghindari pengukuran kecepatan disk.

Tes 1

Direktori yang files1berisi 100.000 file kosong .

$ time tar tzf files1.tgz >/dev/null
tar tzf files1.tgz > /dev/null  0,56s user 0,09s system 184% cpu 0,351 total
$ time unzip -l files1.zip >/dev/null
unzip -l files1.zip > /dev/null  0,30s user 0,34s system 99% cpu 0,649 total

zip lebih lambat di sini.

Tes 2

Direktori yang files2berisi 5.000 file dengan masing-masing 512 byte data acak.

$ time tar tzf files2.tgz >/dev/null
tar tzf files2.tgz > /dev/null  0,14s user 0,03s system 129% cpu 0,131 total
$ time unzip -l files2.zip >/dev/null
unzip -l files2.zip > /dev/null  0,03s user 0,06s system 98% cpu 0,092 total

Masih tidak meyakinkan, tetapi zip kali ini lebih cepat.

Tes 3

Direktori yang files3berisi 5.000 file dengan masing-masing data acak 5kB .

$ time tar tzf files3.tgz >/dev/null
tar tzf files3.tgz > /dev/null  0,42s user 0,03s system 111% cpu 0,402 total
$ time unzip -l files3.zip >/dev/null
unzip -l files3.zip > /dev/null  0,03s user 0,06s system 99% cpu 0,093 total

Dalam tes ini dapat dilihat bahwa semakin besar file yang didapat, semakin sulit bagi tar untuk mendaftarkannya.

Kesimpulan

Bagi saya kelihatannya zip memperkenalkan sedikit overhead yang akan Anda perhatikan hanya dengan banyak file yang sangat kecil (hampir kosong), sedangkan untuk sejumlah besar file yang lebih besar ia memenangkan kontes ketika mendaftarkan file yang terdapat dalam arsip.

Sebastian Stark
sumber