Comment extraire un répertoire spécifique d'une archive tar? et supprimer un annuaire principal?

12

Je souhaite extraire un répertoire spécifique de l'archive tar wordpress. spécifiquement wp-includesà .. Il semble que la structure de répertoires à l'intérieur de l'archive soit, wordpress/wp-includesmais j'ai juste besoin ./wp-includesune fois qu'elle est extraite, pas de répertoire wordpress principal. Comment pourrais-je faire ça?

xénoterracide
la source

Réponses:

13

Pour extraire un répertoire spécifique (et son contenu, récursivement), passez-le simplement comme argument supplémentaire sur la ligne de commande. Avec GNU tar , vous pouvez supprimer un répertoire principal avec l' --strip-componentsoption (et plus généralement transformer les noms de fichiers avec --transform). Sur les systèmes non Linux, vous pouvez utiliser pax (c'est dans POSIX, mais certaines distributions Linux omettent de leur installation par défaut) et son -soption.

tar xf foo.tar --strip-components=1 wordpress/wp-includes  #GNU tar
pax -r <foo.tar -pp -s '!^wordpress/!!' wordpress/wp-includes

Vous pouvez fusionner la liste d'inclusion avec les règles de réécriture en ajoutant une règle pour tout réécrire sous le nom vide (ce qui signifie «ne pas extraire»; la règle ne s'applique que si les règles précédentes ne correspondent pas).

pax -r <foo.tar -pp -s '!^wordpress/\(wp-includes/\)!\1!' -s !.*!!
Gilles 'SO- arrête d'être méchant'
la source
5

En supposant que vous avez GNU tar, vous pouvez utiliser --strip-components:

$ tar xaf tarball.tar.gz --strip=1 wordpress/wp-includes

Je crois que les versions actuelles de tar BSD prennent également en charge --strip-components. Dans le pire des cas, vous pourriez faire:

$ tar xzf tarball.tar.gz wordpress/wp-includes
$ mv wordpress/wp-includes .
$ rmdir wordpress
cjm
la source
J'ai fini par faire ce dernier juste parce que je suis pressé, mais bon de savoir que le premier existe.
xenoterracide
Serait-il possible d'utiliser une commande qui ne nécessite pas de nommer explicitement le composant supprimé (par exemple wordpress)? J'ai besoin de cela lorsque j'extrais des tarballs créés par GitHub qui contiennent la révision git dans le composant supprimé que je ne connais pas à l'avance.
tjanez