Tar -tvf decomprime il file o elenca semplicemente i nomi?


9

Ho un tar.gzfile di 32 GB. Stavo cercando di estrarre cartelle specifiche da esso, quindi ho elencato i contenuti con il seguente comando per visualizzare la struttura dei file:

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

Sembra impiegare un'eternità a elencare tutti i file. La mia domanda è: il flag -t estrae anche i file? So che non si estrae sul disco ma la quantità di tempo che ci vuole mi fa chiedere se li elabora effettivamente in una sorta di buffer.


1
Hai dimenticato l' -zopzione di: tar -tvfz. Simile: Cosa succede se si utilizza il comando tar tvf anziché tar tvfz?
smci,

3
@smci: viene rilevato automaticamente, quindi non è stato dimenticato.
Ry,

Risposte:


14

I file tar.gz non hanno un indice. A differenza di zip o altri formati di archivio, non è banale né economico ottenere un elenco dei file contenuti o di altri metadati. Per mostrarti quali file sono contenuti nell'archivio, tar deve davvero decomprimere l'archivio ed estrarre i file, anche se nel caso -tdell'opzione lo fa solo in memoria.

Se un modello comune nel tuo caso d'uso è quello di elencare i file contenuti in un archivio, potresti prendere in considerazione l'uso di un formato di archivio che può aggiungere un indice di file al file compresso, ad esempio zip.

Forse vuoi anche dare un'occhiata al formato HDF5 per scenari più complessi.

misure

Ho dovuto fare alcune misurazioni per dimostrare la mia risposta e ha creato alcune directory con molti file in loro e che entrambi le valigie, tar czf files#.tgz files#e zip -r files#.zip files#.

Per i test ho eseguito il comando di decompressione due volte ogni volta e ho preso il risultato della seconda corsa, per cercare di evitare la misurazione della velocità del disco.

Test 1

Directory files1contenente 100.000 file vuoti .

$ 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 è più lento qui.

Test 2

Directory files2contenente 5.000 file con 512 byte di dati casuali ciascuno.

$ 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

Ancora non convincente, ma questa volta zip è più veloce.

Test 3

Directory files3contenente 5.000 file con 5kB di dati casuali ciascuno.

$ 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

In questo test si può vedere che più grandi sono i file, più difficile è tar per elencarli.

Conclusione

A me sembra che zip presenti un piccolo overhead che noterai solo con molti file molto piccoli (quasi vuoti), mentre per un gran numero di file più grandi vince il concorso quando elenca i file contenuti nell'archivio.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.