Como ter o tar seguindo todos os links simbólicos, exceto um symlink recursivo

0

Existe uma maneira (em vários comandos se necessário) para fazer um arquivo tar que segue todos os links simbólicos (como com tar -h ), exceto por um symlink recursivo, que deve ser preservado como é?

Eu tenho uma estrutura de diretórios como esta:

project1
  code folder
  dependencies folder
    symlink to project1 folder (recursive!)
    symlink to project2 folder
    symlink to project3 folder
    ... more symlinks, folders, etc
project2
  code folder
project3
  code folder
... more projects

Eu quero tar project1 e ele segue todos os links simbólicos para copiar pastas externas como project2 e project3 , mas eu não quero que ele siga o symlink recursivo que ele tem para si porque não é necessário e faz com que tar seja executado para sempre.

Da página man , parece que posso fazer isso com tar -H , mas vou precisar especificar cada link simbólico que quero seguir. Essa é uma lista longa e requer atualização sempre que eu adiciono outra dependência com links simbólicos, então estou procurando uma solução que funcione com menos manutenção.

A resposta rápida aqui é "não use links simbólicos recursivos" e é isso que eu estou fazendo agora, mas é algo que eu gostaria de ter para o meu projeto e não posso fazê-lo sem criar um solução para este problema.

    
por James Mitchell 19.01.2018 / 21:57

1 resposta

1

Crie o arquivo, com -h , mas excluindo o link específico do problema com --exclude=path/to/naughty/symlink .

Em seguida, adicione o filho problemático com tar --append sem -h .

O não usa uma opção de compactação (por exemplo, tar j ou tar z ), pois um tarball compactado é incompatível com o "pós-processamento", como --append e --delete . Depois de adicionar os arquivos, você pode usar gzip tarball.tar .

    
por 19.01.2018 / 22:06

Tags