Como criar uma pasta base comum com tar e como renomear pastas?

3

Então, sou muito novo no Ubuntu e em todo o ambiente Linux, embora seja um cientista da computação e quero me familiarizar com os comandos básicos.

No momento, estou trabalhando com arquivos .tar e .tar.gz e tenho um problema ao criar um deles.

Vamos supor que eu tenha a seguinte estrutura de arquivos:

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

Com os seguintes comandos eu atualmente crio meu arquivo tar:

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

Agora meu arquivo.tar também tem o formato

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

Agora vamos para a minha pergunta: Como posso alcançar as três estruturas de arquivamento a seguir, considerando a estrutura de arquivos acima:

  1. Adicione uma pasta base comum

    archive.tar
    |-> baseFolder
        |-> a
            |-> Release
                |-> [some files]
        |-> b
            |-> Release
                |-> [some files]
    
  2. Renomeie as pastas

    archive.tar
    |-> aChangedFolderName
        |-> Release
            |-> [some files]
    |-> bChangedFolderName
        |-> Release
            |-> [some files]
    
  3. Adicione uma pasta base comum e renomeie as pastas

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

Para mim, não importa se isso pode ser feito em várias etapas, pelo menos espero poder fazê-lo. E o # 1 seria o mais importante para mim.

    
por Markus Weninger 18.03.2015 / 12:40

1 resposta

6

Você pode fazer 1. com o seguinte comando:

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

O arquivo conterá:

$ 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

Para 2. você pode executar tar com várias opções --transform :

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

O arquivo conterá:

$ 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

Para 3. você pode combinar 1. e 2. como segue:

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

O arquivo conterá:

$ 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
    
por Sylvain Pineau 18.03.2015 / 12:58