J'ai un énorme fichier tar (environ 500G) et je ne veux pas en extraire un seul fichier.
Cependant, lorsque je lance, tar -xvf file.tgz path/to/file
il semble qu'il charge toujours tout le contenu en mémoire et qu'il faut plus d'une heure pour extraire. J'ai également essayé d'utiliser --exclude=ignore.txt
où ignore.txt est une liste de modèles pour l'empêcher de traverser des chemins futiles, mais cela ne semble pas fonctionner.
Peut-être que je ne comprends pas tar ... Y a-t-il un moyen d'extraire rapidement le fichier?
Réponses:
Malheureusement, pour déballer un seul membre de l'
.tar.gz
archive, vous devez traiter l'archive entière, et vous ne pouvez pas faire grand-chose pour la réparer.C'est là que
.zip
(et certains autres formats comme.rar
) les archives fonctionnent beaucoup mieux, car lezip
format a un répertoire central de tous les fichiers qu'il contient avec des décalages directs pointant vers le milieu duzip
fichier, de sorte que les membres de l'archive peuvent être rapidement extraits sans traiter le tout.Vous pourriez vous demander pourquoi le traitement
.tar.gz
est si lent?.tar.gz
(souvent abrégé en.tgz
) est simplement.tar
archivé compressé avecgzip
compresseur.gzip
est un compresseur de streaming qui ne peut fonctionner qu'avec un seul fichier. Si vous voulez obtenir une partie dugzip
flux, vous devez le décompresser dans son ensemble, et c'est ce qui le tue vraiment.tar.gz
(et pour.tar.bz2
,.tar.xz
et d'autres formats similaires basés sur.tar
)..tar
le format est en fait très, très simple. Il s'agit simplement d'un flux d'en-têtes de fichier ou de répertoire de 512 octets (nom, taille, etc.), chacun suivi du contenu du fichier ou du répertoire (complété à une taille de bloc de 512 avec 0 octet si nécessaire). Lorsque vous observez un bloc 512 totalement nul pour un en-tête, cela signifie la fin de l'.tar
archive.Certaines personnes pensent que même
.tar
les membres des archives ne sont pas accessibles rapidement, mais ce n'est pas tout à fait vrai. Si l'.tar
archive contient peu de gros fichiers, vous pouvez en fait rechercher rapidement dans l'en-tête suivant, et ainsi vous pouvez trouver le membre d'archive nécessaire en quelques recherches (mais il pourrait toujours nécessiter autant de recherches qu'il y a de membres d'archive). Si votre.tar
archive contient de nombreux fichiers minuscules, cela signifie que la récupération rapide des membres devient effectivement impossible même pour les fichiers non compressés.tar
.la source
Si vous extrayez un seul fichier d'un grand fichier tar, vous utilisez GNU
tar
, et vous pouvez garantir que le fichier tar n'a jamais été ajouté, alors vous pouvez obtenir une amélioration significative des performances en utilisant--occurrence
.Cette option indique à tar de s'arrêter dès qu'il trouve la première occurrence de chaque fichier que vous avez demandé, par exemple
ne se déroulera pas dans toute l'archive tar une fois qu'il aura trouvé une copie de chacun
passwd
etshadow
, à la place, il s'arrêtera. Si ces fichiers apparaissent vers la fin, le gain de performances ne sera pas beaucoup, mais s'ils apparaissent même à mi-chemin dans un fichier 500G, vous gagnerez beaucoup de temps.Pour les personnes utilisant
tar
des sauvegardes à une seule prise et n'utilisant pas de vrais lecteurs de bande, cette situation est probablement le cas typique.Notez que vous pouvez également passer
--occurrence=NUMBER
pour récupérer l'occurrence NUMBERth de chaque fichier, ce qui est utile si vous savez qu'il existe plusieurs versions dans l'archive. Par défaut, le comportement est égal à aNUMBER
de 1.la source
--occurrence
cela se déclenche immédiatement sur le premier fichier? Je suppose qu'il s'agit de noms de fichiers, donc quelque chose appelé aaaaa.jpg sortirait en premier par exemple?tar
de continuer à rechercher dans l'archive tar les nouvelles versions d'un fichier qu'il a trouvé. Au contraire , il revient, comme le dit la page de manuel,the Nth occurrence
. Si vous spécifiez un fichier à extraire sur la ligne de commande et que vous dites,--occurrence
tar se fermera dès qu'il aura trouvé ce fichier et s'arrêtera donc effectivement au "premier fichier".Malheureusement, le format de fichier tar ne contient pas de table des matières centralisée - donc l'archive doit être lue séquentiellement pour localiser un fichier particulier. Il a été initialement conçu pour les sauvegardes sur bande ("tar" vient de t ape ar chive), qui n'aurait en aucun cas supporté une telle opération.
Donc, vous devrez probablement attendre.
la source
En cas d'utilisation d'une grande archive tar:
ce qui précède cherchera jusqu'à ce qu'il trouve une correspondance, puis quittera
la source
man tar
(GNU tar 1.29) n'imprime même pas cette option. Cependant, Ubuntu semble l'avoir activé par défaut . En lisant rapidement, je ne sais pas ce qui--fast-read
fait différemment--occurrence
. Mais ce--occurrence
n'est même pas sur la page Ubuntu, mais c'est dansman tar
. Sont--fast-read
et--occurrence
la même chose peut - être?