Colocar arquivos tar'd em um subdiretório

8

Eu tenho uma configuração de diretório como a seguinte:

folder_x
file.y
file.z

Eu gostaria de criar um arquivo tar para que, quando extraído, a estrutura se parecerá com isso:

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

Como eu consegui fazer isso funcionar usando tar? Para referência, o comando atual que estou usando é:

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

fonte

Respostas:

9

Eu nunca usei a opção --transform, mas acho que faria o que você precisa:

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

Perceba o uso de em ,vez de /como separador, para que possamos adicionar uma barra final.

Marnix A. van Ammers
fonte
Hmm, não parece estar fazendo isso corretamente: file.z-> dirfile.ze dirfolder_x. Também vou brincar com o regex para ver se consigo do jeito que eu quero.
11
Aqui está como eu faço: tar -czf archive.tar.gz --transform 's, ^, dir_q /,' file.y file.z folder_x O sed permite, em vez de /, evitar ambiguidade quando houver barras na sua expressão . Normalmente, eu diria que você pode escapar da barra com uma barra invertida, mas sed (pelo menos, gnu sed) não a interpreta corretamente.
jdb
não tar --transform não parecem funcionar em MacOS
Alexander Mills
No MacOS, você pode instalar o macports e o gnutar para obter a opção --transform. Ou faça o download e compile o próprio gnutar.
Marnix A. van Ammers
1

Se você não se importa em criar o novo diretório ...

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

Como alternativa, crie um novo diretório, descompacte o arquivo nesse diretório e, em seguida, refaça o tar do diretório pai para incluir o nome na versão extraída. Dessa forma, você não precisa se lembrar de uma invocação super longa.

John T
fonte