Prefixo prefixo no tar

12

Eu faço atualmente em um shellscript de forma muito ineficiente:

cp -a $MYPATH /tmp/$VERSION
cd /tmp
tar cjf archive.tar.bz2 $VERSION

Eu quero que tudo esteja contido no diretório chamado $ VERSION - existe uma maneira de fazer isso sem ter que copiar tudo como no script acima?

    
por Robby75 14.05.2013 / 14:25

3 respostas

21

A versão GNU de tar suporta a opção --transform (e seu alias --xform ), você pode usá-lo assim

tar --transform "s/^$MYPATH/$VERSION/" -cf archive.tar.bz2 "$MYPATH"

Por exemplo, dada esta árvore de diretórios

foo
└── foo.txt

o comando

tar --transform "s/^foo/bar/" -cf foo.tar.bz2 foo

produzirá um arquivo como

$ tar -tf foo.tar.bz2
bar/
bar/foo.txt
    
por 14.05.2013 / 14:46
13

Para tar o diretório atual e adicionar um prefixo, isso funcionou para mim:

tar --transform 's,^\.,$VERSION,' -cf foo.tar .
    
por 24.05.2013 / 11:24
0

Se você puder escapar sem preservar os links simbólicos dentro da árvore de arquivos que você está bloqueando, você pode fazer

ln -s $MYPATH /tmp/$VERSION
cd /tmp
tar cjhf archive.tar.bz2 $VERSION

A opção h significa desreferencias de links simbólicos, ou seja, inclui o arquivo ou diretório para o qual o link aponta, em vez de simplesmente registrar o fato de que havia um link simbólico e o que ele apontava.

    
por 14.05.2013 / 14:39

Tags