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
Preciso --dereference
aqui da opção de seguir os links que acabei de criar no tmp
. A razão pela qual faço os links em primeiro lugar é para armazenar os diretórios com um nome diferente no arquivo morto do que eles têm no sistema de arquivos.
Até agora funcionou bem. No entanto, agora tenho uma situação que /path/to/app1
também contém links e aqueles que não quero seguir.
Isso é possível com algumas alterações no tar
comando? Ou preciso mudar completamente a forma como construo o arquivo?
Responder1
Não acho que haja uma maneira de ter 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 então extraí-los para uma raiz diferente usando -C
-C, --diretório=DIR
change to directory DIR
por exemplo
mkdir tmp
tar -C tmp -xf apps.tar
o que teria um efeito semelhante ao modo como você cria seu arquivo atualmente.
Você também pode usar o -C para apontar para qualquer diretório existente.
Responder2
Você realmente precisa que a estrutura de diretórios no tarball seja diferente da estrutura do disco?
Caso contrário, você pode simplesmente colocá-los como estão:
tar -cf file.tar /path/1 /path/2
Responder3
Em vez de vincular, eu poderia copiar. Infelizmente, isso acrescentaria mais sobrecarga (os arquivos são bastante grandes). É claro que cresceria no máximo o dobro, já que o alcatrão em si também é uma forma de cópia.
Responder4
Se você estiver root
, sua melhor aposta é usar o comando bind do mount para basicamente vincular os diretórios que você deseja criar, em vez de criar links simbólicos para eles. Então você não precisará usar a opção de desreferência.
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. Veresses avisos.