web-dev-qa-db-fra.com

Comment créer un dossier de base commun avec tar et comment renommer des dossiers?

Donc, je suis plutôt nouveau dans Ubuntu et dans l’ensemble de l’environnement Linux, même si je suis un informaticien et que je veux me familiariser avec les commandes de base.

En ce moment, je travaille avec les fichiers .tar et .tar.gz et j'ai un problème pour en créer un.

Supposons que j'ai la structure de fichier suivante:

./
|-> a
    |-> Release
        |-> [some files]
|-> b
    |-> Release
        |-> [some files]

Avec les commandes suivantes, je crée actuellement mon fichier tar:

tar -cvf ../archive.tar a
tar -rvf ../archive.tar b

Maintenant, mon archive.tar a aussi le format

archive.tar
|-> a
    |-> Release
        |-> [some files]
|-> b
    |-> Release
        |-> [some files]

Venons-en maintenant à ma question: Comment puis-je obtenir les trois structures d’archive suivantes avec la structure de fichier susmentionnée:

  1. Ajouter un dossier de base commun

    archive.tar
    |-> baseFolder
        |-> a
            |-> Release
                |-> [some files]
        |-> b
            |-> Release
                |-> [some files]
    
  2. Renommez les dossiers

    archive.tar
    |-> aChangedFolderName
        |-> Release
            |-> [some files]
    |-> bChangedFolderName
        |-> Release
            |-> [some files]
    
  3. Ajouter un dossier de base commun et renommer les dossiers

    archive.tar
    |-> baseFolder
        |-> aChangedFolderName
            |-> Release
                |-> [some files]
        |-> bChangedFolderName
            |-> Release
                |-> [some files]
    

Pour moi, peu importe si cela peut être accompli en plusieurs étapes, du moins j'espère pouvoir le faire. Et: # 1 serait le plus important pour moi.

4
Markus Weninger

Vous pouvez faire 1. avec la commande suivante:

tar cvf archive.tar --transform 's,^,baseFolder/,'  a b

L'archive contiendra:

$ tar tvf archive.tar
drwxrwxr-x sylvain/sylvain   0 2015-03-18 12:47 baseFolder/a/
-rw-rw-r-- sylvain/sylvain   0 2015-03-18 12:47 baseFolder/a/foo
drwxrwxr-x sylvain/sylvain   0 2015-03-18 12:47 baseFolder/b/
-rw-rw-r-- sylvain/sylvain   0 2015-03-18 12:47 baseFolder/b/bar

Pour 2. vous pouvez exécuter tar avec plusieurs options --transform:

tar cvf archive.tar --transform 's,^a,changed_a,' --transform 's,^b,changed_b,'  a b

L'archive contiendra:

$ tar tvf archive.tar
drwxrwxr-x sylvain/sylvain   0 2015-03-18 12:47 changed_a/
-rw-rw-r-- sylvain/sylvain   0 2015-03-18 12:47 changed_a/foo
drwxrwxr-x sylvain/sylvain   0 2015-03-18 12:47 changed_b/
-rw-rw-r-- sylvain/sylvain   0 2015-03-18 12:47 changed_b/bar

Pour 3. vous pouvez combiner 1. et 2. comme suit:

tar cvf archive.tar --transform 's,^a,changed_a,' --transform 's,^b,changed_b,' --transform 's,^,baseFolder/,' a b

L'archive contiendra:

$ tar tvf archive.tar
drwxrwxr-x sylvain/sylvain   0 2015-03-18 12:47 baseFolder/changed_a/
-rw-rw-r-- sylvain/sylvain   0 2015-03-18 12:47 baseFolder/changed_a/foo
drwxrwxr-x sylvain/sylvain   0 2015-03-18 12:47 baseFolder/changed_b/
-rw-rw-r-- sylvain/sylvain   0 2015-03-18 12:47 baseFolder/changed_b/bar
8
Sylvain Pineau