Extrait 1 fichier de tar.gz avec bash
Est-il possible par programmation tirer un seul fichier à partir d'un décemment de taille moyenne .tar.gz sans extraire la totalité de l'archive sur le disque? En fait, j'ai besoin d'obtenir à l'intérieur de grandes tar.gz des fichiers sur le réseau et d'en extraire 1 petit fichier texte. Il semble un peu over-the-top à tirer et extraire l'archive sur le disque, puis tirez sur le fichier, puis de les supprimer tout le reste. Aussi, je vais faire cela de façon récursive (par exemple, les dépendances de package, chaque fichier texte points de plus tar.gz's), de sorte que le moins de trafic réseau et les cycles de processeur je peux m'en tirer le meilleur.
Menuisier: Il n'est pas vraiment bash. C'est une question de l'utilisation d'un système commun utilitaire qui peut être appelée à partir d'un shell, et pas seulement bash. Mais oui, de la programmation en bash est en effet le programme, en dépit de ce que vous avez peut-être entendu parfois ici.
Ouais, j'ai pensé à la LIGUE, mais c'est à l'intérieur un relativement complexe script bash, et il va être exécuté par la machine, non par un utilisateur, j'ai donc pensé qu'il était un peu plus que de la LIGUE.
Eh bien, je n'ai pas personnellement l'esprit; non pas sur le point de commencer une croisade ou quoi que ce soit. Mais j'ai vu des questions beaucoup plus en relation avec la programmation migré vers la LIGUE. (Et vraiment, si vous l'utilisez pour la programmation, la réponse ne dépend pas que.) Oh bien. Rep pour moi!
Bon point. Je n'ai pas vraiment l'esprit de toute façon, c'était juste la façon dont je le voyais.
OriginalL'auteur tj111 | 2010-08-12
Vous devez vous connecter pour publier un commentaire.
À partir de la page de man, à l'extrait de blah.txt à partir de foo.tar.gz:
(Et ce qui se passe superutilisateur, bien sûr, mais bon, invite les réponses sont sympas aussi.)
Avec les versions modernes de GNU tar, vous n'avez pas à spécifier le 'z' de l'option de sur extrait - il en déduire que lui-même (et de même avec le 'j' option pour bzip2 fichiers compressés). Lors de la création du fichier, vous avez besoin de l'option à dire de goudron de quoi créer - si la symétrie n'y a aucun mal que ce soit.
si le nom de fichier dans le fichier tar est
xyz/pqr/abc.txt
, c'est ce que vous indiquez dans la ligne de commande. Vous pouvez utiliser de style shell métacaractères:xyz/pqr/*
va extraire tous les fichiers dans tous les sous-répertoires sousxyz/pqr
. Méfiez-vous de savoir si le shell étend le '*' pour vous - utilisez les guillemets pour arrêter de le faire.Oui, bien sûr. Et il va créer les répertoires pour les fichiers unique.
Leffler: Ouais, vrai; j'ai pensé à ça, mais pensé que je lui cite le manuel à la lettre.
OriginalL'auteur Cascabel
Je écho Jefromi de réponse, avec l'ajout d', y compris le chemin d'accès au fichier si vous avez des répertoires dans le fichier tar (cela peut paraître évident pour certains, mais il n'était initialement pas clair pour moi comment spécifier la structure de répertoire).
Par exemple, si vous avez le tar dans le répertoire src/, et blah.txt était sous release1/shared/, vous devriez revenir au répertoire src/(si vous voulez pas goudronnés à la même place)
Si vous ne vous souvenez pas de la structure de répertoire de votre fichier tar (je suis un peu désorganisé et parfois d'oublier où j'ai fait le goudron), vous pouvez toujours
pour voir le contenu, annuler (Ctrl+C) une fois que vous obtenez une idée de votre structure de répertoire.
./
devant les répertoires pour quelque raison que ce soit à analyser. par exemple,tar -xzf tar.gz ./release1/shared/blah.txt
OriginalL'auteur Chance