J'ai un gros fichier foo.tar.xz
qui contient beaucoup (disons 200000) de fichiers. J'ai compris que cette archive contient des fichiers (environ 5000) que je ne veux pas. Je n'ai pas suffisamment d'espace disque pour décompresser le tout sur mon disque; en outre, je crains que les attributs / droits ne se perdent si je le fais. J'ai cependant assez d'espace pour héberger deux copies de l' archive compressée . Existe-t-il un outil pour supprimer certains fichiers de l'archive (spécifié avec une expression régulière sur le nom de fichier) à la volée, c'est-à-dire sans décompresser l'archive dans des fichiers individuels?
17
gtar --delete
.-T
fonctionne avec--delete
et--wildcards
vous permet d'utiliser des modèles plutôt que des noms de fichiers, alors créez un fichier temporaire contenant les modèles et utilisezunxz < file.tar.xz | tar --wildcards --delete -T patternfile | xz > file2.tar.xz
. Il ne fera pas une expression régulière complète (si vous en avez besoin, utilisez simplementtar -t
et établissez une liste de noms de fichiers à supprimer), juste des modèles de correspondance de noms de fichiers.(édité, car j'ai mal compris la question, qui a également été éditée depuis)
Le mieux que vous puissiez faire est d'extraire, de supprimer et de recompresser l'intégralité du fichier.
unxz < foobar-old.tar.xz | tar --delete foo/bar | xz > foobar-new.tar.xz
Il n'est pas possible de supprimer directement des fichiers d'un tar.
tar est un flux, à l'origine destiné aux lecteurs de bande qui ne font pas de recherche aléatoire - alors qu'en théorie, il pourrait être possible sur un système de fichiers sur disque de percer un trou / réécrire le fichier restant, avec la compression le point est théorique comme la plupart sinon la totalité les méthodes de compression dépendent fortement du contenu qui s'est produit plus tôt dans le fichier. Pour ce faire, vous auriez besoin de connaissances très détaillées sur la méthode de compression ainsi que sur le format de fichier tar. Cette complexité est telle que personne ne s'en préoccuperait. Il est moins coûteux de simplement conserver les fichiers et de les ignorer.
Si vous avez besoin de cette fonctionnalité, tar n'est probablement pas ce que vous voulez.
la source
--wildcards
aide ... je devais inclure./
au début du modèle si ...Selon le manuel , vous pouvez transmettre une liste de noms de fichiers
tar
à uniquement pour les extraire. Par exemple:la source