Atualmente, faço em um shellscript muito ineficientemente:
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?
tar cjf archive.tar.bz2 $MYPATH
?Respostas:
A versão GNU do
tar
suporta a--transform
opção (e seu alias--xform
), você pode usá-lo assimPor exemplo, dada essa árvore de diretórios
o comando
irá produzir um arquivo como
fonte
flags=r;
resolve o problema conforme mencionado em stackoverflow.com/a/29661783/388803 .s/^a\//b\//
, otar -t
still mostraa/
enquanto todos os outros arquivos estão em baixob/
; Suponho que isso seja perigoso e realmente não preciso me proteger contra outro arquivo com o mesmo prefixo que não seja um diretório no arquivo tar; portanto, nenhuma barra final é boa, não me importo de saber a melhor maneira de lidar com o caso dea/
ser transformado, mas nãoaa/
se fosse um irmão do nó raiz.Para tar o diretório atual e adicionar um prefixo, isso funcionou para mim:
fonte
Se você puder fugir sem preservar os links simbólicos na árvore de arquivos que você está tarrando, poderá fazer
A
h
opção significa links simbólicos de desreferência, ou seja, inclui o arquivo ou diretório ao qual o link aponta, em vez de simplesmente registrar o fato de que havia um link simbólico e o que ele apontava.fonte