Malheureusement, afin de décompresser un seul membre de .tar.gz
archive, vous devez traiter l'intégralité de l'archive, et vous ne pouvez pas faire grand-chose pour la réparer.
C'est là que .zip
(et quelques autres formats comme .rar
) les archives fonctionnent beaucoup mieux, car zip
le format a un répertoire central de tous les fichiers qu'il contient avec des décalages directs pointant vers le milieu du zip
fichier, afin que les membres de l'archive puissent être extraits rapidement sans tout traiter.
Vous pourriez vous demander pourquoi traiter .tar.gz
est si lent ?
.tar.gz
(souvent abrégé en .tgz
) est simplement .tar
archive compressée avec gzip
compresseur. gzip
est un compresseur de streaming qui ne peut fonctionner qu'avec un seul fichier. Si vous souhaitez obtenir une partie de gzip
stream, vous devez le décompresser dans son ensemble, et c'est ce qui le tue vraiment pour .tar.gz
(et pour .tar.bz2
, .tar.xz
et autres formats similaires basés sur .tar
).
.tar
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 .tar
archiver.
Certaines personnes pensent que même .tar
les membres de l'archive ne sont pas accessibles rapidement, mais ce n'est pas tout à fait vrai. Si .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 cela peut toujours nécessiter autant de recherches qu'il y a de membres d'archive). Si votre .tar
l'archive contient de nombreux fichiers minuscules, cela signifie qu'une récupération rapide des membres devient effectivement impossible, même pour .tar
non compressé .
Si vous extrayez un seul fichier d'un gros 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
tar xf large-backup.tar --occurrence etc/passwd etc/shadow
ne parcourra pas l'intégralité de l'archive après avoir trouvé une copie de chacun des passwd
et shadow
, à la place, il s'arrêtera. Si ces fichiers apparaissent vers la fin, le gain de performances ne sera pas important, mais s'ils apparaissent même à mi-chemin d'un fichier de 500 Go, vous gagnerez beaucoup de temps.
Pour les personnes utilisant tar
pour les sauvegardes uniques et n'utilisant pas de véritables lecteurs de bande, cette situation est probablement le cas typique.
Notez que vous pouvez également passer --occurrence=NUMBER
pour récupérer la NUMBERième occurrence de chaque fichier, ce qui aide si vous savez qu'il existe plusieurs versions dans l'archive. Par défaut le comportement est égal à un NUMBER
de 1.
Lorsqu'il s'agit d'une grande archive tar, utilisez :
--fast-read
pour extraire uniquement la première entrée d'archive qui correspond à l'opérande du nom de fichier,path/to/file
dans ce cas - qui est toujours unique dans l'archive tar de toute façon
tar -xvf file.tgz --fast-read path/to/file
ce qui précède recherchera jusqu'à ce qu'il trouve une correspondance, puis quittera