Placer les fichiers tar dans un sous-répertoire


8

J'ai une configuration de répertoire comme celle-ci:

folder_x
file.y
file.z

Je voudrais créer un fichier tar de sorte que lorsqu'il est extrait, la structure ressemble à ceci:

dir_q/folder_x
dir_q/file.y
dir_q/file.z

Comment pourrais-je faire fonctionner cela en utilisant tar? Pour référence, la commande actuelle que j'utilise est:

tar -czf archive.tar.gz file.y file.z folder_x

Réponses:


9

Je n'ai jamais utilisé l'option --transform, mais je suppose qu'elle ferait ce dont vous avez besoin:

tar -czf archive.tar.gz --transform 's,^,dir_q/,' file.y file.z folder_x

Réalisez l'utilisation de ,au lieu de /comme séparateur, afin que nous puissions ajouter une barre oblique de fin.


Hmm, il ne semble pas le faire correctement: file.z-> dirfile.zet dirfolder_x. Je jouerai aussi avec l'expression régulière pour voir si je peux l'obtenir comme je le veux.

1
Voici comment je le fais: tar -czf archive.tar.gz --transform's, ^, dir_q /, 'file.y file.z folder_x Sed permet, au lieu de /, d'éviter toute ambiguïté lorsqu'il y a des barres obliques dans votre expression . Normalement, je dirais que vous pouvez échapper à la barre oblique avec une barre oblique inverse, mais sed (au moins, gnu sed) ne l'interprète pas correctement.
jdb

tar --transform ne semble pas fonctionner sur MacOS
Alexander Mills

Sous MacOS, vous pouvez installer macports et gnutar pour obtenir l'option --transform. Ou téléchargez et compilez vous-même gnutar.
Marnix A. van Ammers

1

Si cela ne vous dérange pas de créer le nouveau répertoire ...

mkdir dir_q; tar -C $ _ -xzvf archive.tar.gz

sinon, créez un nouveau répertoire, décompressez le fichier dans ce répertoire, puis refaites le tar à partir du répertoire parent pour inclure son nom dans la version extraite. De cette façon, vous n'avez pas à vous souvenir d'une invocation super longue.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.