web-dev-qa-db-fra.com

Comment extraire des fichiers spécifiques de tar.gz

Comment extraire des fichiers spécifiques d'un gros fichier tar.gz? J'ai trouvé le processus d'extraction de fichiers à partir d'un tar dans cette question mais, lorsque j'ai essayé la commande mentionnée ici, j'ai eu l'erreur:

$ tar --extract --file={test.tar.gz} {extract11}
tar: {test.tar.gz}: Cannot open: No such file or directory
tar: Error is not recoverable: exiting now

Comment puis-je extraire un fichier de tar.gz?

122
Ankit Vashistha

Vous pouvez aussi utiliser tar -zxvf <tar filename> <file you want to extract>

Vous devez écrire le nom de fichier exactement comme tar ztf test.tar.gz le montre. Si cela dit par exemple ./extract11, ou some/bunch/of/dirs/extract11, c'est ce que vous devez donner (et le fichier apparaîtra exactement sous ce nom, les répertoires nécessaires sont créés automatiquement).

  • -x: demande à tar d'extraire les fichiers.
  • -f: spécifie le nom de fichier/nom de l'archive.
  • -v: Verbose (affiche la progression lors de l'extraction des fichiers).
  • -z: filtre l'archive via gzip, permet de décompresser les fichiers .gz.
140
harish.venkat

Supposons que vous ayez une archive tar appelée lotsofdata.tar.gz et vous savez juste qu'il y a un fichier que vous voulez mais tout ce dont vous vous souvenez, c'est que son nom contient le mot contract. Vous avez deux options:

Soit tar et grep pour lister le contenu de votre tarball afin que vous puissiez trouver le chemin complet et le nom de tous les fichiers qui correspondent à la partie que vous connaissez, puis utilisez tar pour extraire ce fichier maintenant vous connaissez ses détails exacts, ou vous pouvez utiliser deux commutateurs peu connus pour simplement extraire tous les fichiers qui correspondent au peu que vous savez de votre nom de fichier - vous n'avez pas besoin de connaître le nom complet ou partie de son chemin pour cette option. Les détails sont:

Option 1

$ tar -tzf lotsofdata.tar.gz | grep contract

Cela répertoriera les détails de tous les fichiers dont les noms contiennent votre partie connue. Ensuite, vous extrayez ce que vous voulez en utilisant:

$ tar -xzf lotsofdata.tar.gz <full path and filename from your list above>

Tu pourrais avoir besoin de ./ devant votre chemin pour que ça marche.

Option 2

$ tar -xzf lotsofdata.tar.gz --wildcards --no-anchored '*contract*'

À vous de voir ce que vous trouvez le plus facile ou le plus utile.

38
Wendy Cricks

J'essayais d'extraire quelques centaines de fichiers d'une archive tar avec des milliers de fichiers l'autre jour. Les fichiers dont j'ai besoin ne peuvent pas être référencés par un seul caractère générique. J'ai donc googlé et trouvé cette page.

Cependant, aucune des astuces ci-dessus ne semble bonne pour ma tâche. J'ai fini par lire l'homme et j'ai trouvé cette option --files-from, donc ma solution finale est

gunzip < thousands.tar.gz | tar -x -v --files-from hundreds.list -f -

et cela fonctionne comme un charme.

pdate: Le fichier de liste doit avoir le même format que celui que vous verriez dans tar -tvf, sinon vous ne pourrez extraire aucun fichier.

8
JJ Tang

Veuillez trouver ci-dessous des exemples d'extraction de fichiers spécifiques du fichier tar.gz.

Du fichier local:

$ tar xvf file.tgz path/README.txt 2nd_file.txt

Depuis l'URL distante:

$ curl -s http://example.com/file.tgz | tar xvf - path/README.txt 2nd_file.txt
3
kenorb

Votre exemple fonctionne pour moi si vous omettez les accolades

$ tar --extract --file=test.tar.gz extract11

Si votre fichier extract11 est dans un sous-dossier, vous devez spécifier le chemin dans l'archive tar.

$ tar --extract --file=test.tar.gz subfolder/extract11
2
Bernhard