Tar dereference apenas 1 nível

1

Eu uso o seguinte pseudo-script para criar um TAR do meu software instalado

mkdir tmp
ln -s /path/to/app1/bin              tmp/app1
ln -s /and/path/going/to/the-app-2   tmp/app2
tar -c --dereference -f apps.tar tmp

Eu preciso da opção --dereference aqui para seguir os links que acabei de criar em tmp . A razão pela qual eu faço os links em primeiro lugar é armazenar os diretórios com um nome diferente no arquivo que eles têm no sistema de arquivos.

Até agora, funcionou bem. No entanto, agora tenho a situação de que /path/to/app1 também contém links e aqueles que não quero seguir.

Isso é possível com algumas alterações no comando tar ? Ou eu preciso mudar completamente a maneira como eu construo o arquivo?

    
por Bart van Heukelom 28.08.2012 / 10:33

4 respostas

1

Eu não acho que haja uma maneira de fazer apenas uma desreferência parcial. Você poderia fazer algo como

tar -cf apps.tar /path/to/app1/bin /and/path/going/to/the-app-2

e depois extraí-los para uma raiz diferente usando -C

-C, --directory=DIR

         change to directory DIR

por exemplo,

mkdir tmp
tar -C tmp -xf apps.tar

que teria um efeito semelhante ao modo como você atualmente cria seu arquivo.

Você pode usar o -C para apontar para qualquer diretório existente também.

    
por 28.08.2012 / 10:50
0

Você realmente precisa da estrutura de diretórios no tarball para ser diferente do que está no disco?

Se não, então você pode simplesmente colocá-los como estão:

tar -cf file.tar /path/1 /path/2
    
por 28.08.2012 / 10:41
0

Em vez de vincular, eu poderia copiar. Infelizmente, isso adicionaria um pouco mais de sobrecarga (os arquivos são bem grandes). É claro que cresceria no máximo duas vezes maior, já que o asfalto em si também é uma forma de cópia.

    
por 28.08.2012 / 11:06
0

Se você é root , então a sua melhor aposta é usar o comando bind do mount para basicamente ligar os diretórios que você quer usar, em vez de ligá-los simbolicamente. Então você não precisará usar a opção de desreferenciação.

mkdir tmp
mount --bind /path/to/app-1 tmp/app-1
mount --bind /path/to/app-2 tmp/app-2
tar cf apps.tar tmp

Certifique-se de desmontar esses diretórios antes que algo aconteça acidentalmente com eles. Veja estes avisos .

    
por 28.08.2012 / 16:33