Tar -tvf dosyayı açar mı yoksa sadece adları listeler mi?


9

Bir var tar.gz32 GB dosya. Dosyaların yapısını görüntülemek için aşağıdaki komutla içeriği listelediğim için belirli klasörleri ayıklamaya çalışıyordum:

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

Tüm dosyaları listelemek sonsuza kadar sürüyor gibi görünüyor. Benim sorum -t bayrağı dosyaları da ayıklıyor? Diskte ayıklamadığını biliyorum ama aldığı süre, onları bir çeşit tamponda işleyip işlemediğini merak ediyor.


1
Sen unuttun -zseçeneği: tar -tvfz. Benzer: tar tvfz yerine tar tvf komutunu kullanırsanız ne olur?
smci

3
@ smci: Otomatik olarak algılanır, bu yüzden gerçekten unutulmaz.
Ry-

Yanıtlar:


14

tar.gz dosyalarının bir dizini yoktur. Zip veya diğer arşiv formatlarından farklı olarak, içerilen dosyaların veya diğer meta verilerin bir listesini almak önemsiz veya ucuz değildir. Arşivde hangi dosyaların bulunduğunu göstermek için, katran gerçekten de arşivin sıkıştırmasını açmalı ve dosyaları ayıklamalıdır, ancak -tseçenek durumunda bunu yalnızca bellekte yapar.

Kullanım durumunuzdaki ortak bir desen, içerilen dosyaları bir arşivde listelemekse, sıkıştırılmış dosyaya, örneğin zip gibi bir dosya dizini ekleyebilecek bir arşiv biçimi kullanmayı düşünebilirsiniz.

Belki de daha karmaşık senaryolar için HDF5 formatına bakmak istersiniz .

Ölçümler

Cevabımı kanıtlamak için bazı ölçümler yapmak zorunda kaldım ve içinde birçok dosya içeren bazı dizinler oluşturdum ve bunları paketledim tar czf files#.tgz files#ve zip -r files#.zip files#.

Testler için her seferinde iki kez açma komutunu çalıştırdım ve disk hızını ölçmekten kaçınmak için ikinci çalışmanın sonucunu aldım.

Test 1

100.000 boş dosyafiles1 içeren dizin .

$ 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 burada daha yavaş.

Test 2

Her biri 512 bayt rasgele veri files2içeren 5.000 dosya içeren dizin .

$ 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

Hala ikna edici değil, ancak zip bu sefer daha hızlı.

Test 3

Dizin files3içeren 5kB ile 5,000 dosyaları rastgele veriler her.

$ 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

Bu testte, dosyalar büyüdükçe, tar'ın bunları listelemesi daha zor olur.

Sonuç

Bana göre zip, sadece çok küçük (neredeyse boş) dosyalar ile fark edeceğiniz küçük bir ek yük getiriyor, oysa çok sayıda daha büyük dosya için arşivde bulunan dosyaları listelerken yarışmayı kazanıyor.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.