Dereferência de alcatrão apenas 1 nível

Dereferência de alcatrão apenas 1 nível

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 --dereferenceaqui 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/app1também contém links e aqueles que não quero seguir.

Isso é possível com algumas alterações no tarcomando? 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.

informação relacionada