Répertoriez rapidement le contenu d'une grande archive tar

6

J'ai besoin de lister le contenu d'une archive tar assez volumineuse (environ 37GiB). tar -ztvf archiveprend pour toujours. Y a-t-il un moyen d'obtenir cette liste rapidement? Peut-être en listant seulement le contenu jusqu'à une certaine profondeur de répertoire?

Aurais-je pu faire quelque chose en compilant les archives pour permettre une liste plus rapide du contenu?

Thomas Arildsen
la source
2
Je pense que la prochaine fois que j'archiverai de gros morceaux de fichiers, je vais essayer dar à la place.
Thomas Arildsen

Réponses:

2

Donc, vous avez un ensemble de fichiers, que vous avez créé une archive en utilisant "tar" , qui créera un fichier de sortie. Ensuite, vous avez utilisé "gzip" pour compresser ce fichier ".tar" en un ".zip" .

Si tel est le cas, le processus d'obtenir une liste de tous les fichiers dans le « .tar » fichier, il faut que le « .tar » fichier doit être complètement décompressé à partir du « .zip » fichier, avant que le contenu du " .tar " peut être répertorié.

Cela prendra toujours plus de temps que d’obtenir une liste des fichiers qui sont stockés "directement" dans un fichier ".zip" . Si le fichier est volumineux, ce temps peut être considérable.

Si vous souhaitez réduire le temps requis pour répertorier les fichiers dans un fichier archive compressé, alors:

  1. décompressez (décompressez) le fichier ".tar" à partir du fichier ".zip" et développez le fichier ".tar" résultant dans l'ensemble de fichiers sous-jacent

  2. créez un fichier ".zip" directement à partir de l'ensemble des fichiers.

De cette façon, les fichiers du fichier d'archive peuvent être listés sans décompresser l'archive.

Kevin Fegan
la source
2

-zsignifie à ungzipou gziple fichier tar. Le goudron lui-même s'assemble sans compression. Lorsque vous gzip, vous ne pouvez pas faire grand chose, les métadonnées se trouvent dans le fichier tar compressé,

$ gunzip -l co.tar.gz 
         compressed        uncompressed  ratio uncompressed_name
             177183             1044480  83.0% file.tar

C'est tout ce que gzip voit. Il faut que vous tiriez dessus pour retourner au goudron. La solution Unix pour contourner ce problème consiste simplement à générer un manifeste find . > MANIFESTet à l’envoyer avec. Cependant, il existe d'autres options telles que plutôt que d'utiliser .tar.gzsimplement l'envoi d'un format différent qui ne compresse pas les métadonnées. Je pense 7zipcorrespond à cette description.

Plus récemment, les gens ont commencé à utiliser sha1sumou md5sumce qui est un meilleur plan qu'un MANIFEST ordinaire.

find destination/ -type f -exec sha1sum {} +; > sha1sum

Cela peut aussi être vérifié assez facilement mais il est inutile , car à la fois le goudron et gzip fournissent checksums en interne,

sha1sum -c ./sha1sum
Evan Carroll
la source