tar --listed-incremental inclui todos os diretórios em cada incremento?

2

Dada uma estrutura de árvore com arquivos, diga:

source
|-- bar
|   +-- three.txt
|-- baz
|   +-- four.txt
+-- foo
    |-- one.txt
    +-- two.txt

Se eu fizer

tar czvf dest/archive-1.tgz --listed-incremental dest/archive.snar source/*

Isso cria um arquivo .tgz contendo todos os arquivos e pastas atuais, exatamente o que eu esperava:

source/bar/
source/baz/
source/foo/
source/bar/three.txt
source/baz/four.txt
source/foo/one.txt
source/foo/two.txt

Se eu fizer imediatamente:

tar czvf dest/archive-2.tgz --listed-incremental dest/archive.snar source/*

Isso parece criar o arquivo .tgz contendo todas as subpastas do diretório atual, sem arquivos:

source/bar/
source/baz/
source/foo/

Isso não é o que eu quero. Em um exemplo de brinquedo como este, não é tão ruim, mas em uma estrutura de pastas grande torna muito mais difícil dizer que o .tgz é essencialmente vazio. É muito barulho. Idealmente, tar me diria que não há arquivos atualizados e sair com um código de erro, mas mesmo se ele fizesse um tar vazio, seria melhor (para mim, neste caso) do que um arquivo com muito vazio pastas.

Existe alguma maneira de fazer com que tar --listed-incremental se comporte como eu gostaria? Fiz algumas pesquisas para encontrar soluções, mas não encontrei muita coisa.

Eu posso acabar parando de usar --listed-incremental e fazer algum trabalho com find para montar uma lista de arquivos, mas isso é muito mais trabalhoso se houver uma maneira de fazer --listed-incremental fazer o que eu quero. Alguma sugestão?

    
por Geoffrey Wiseman 10.03.2016 / 23:41

1 resposta

0

A página de manual menciona:

When extracting from the incremental backup GNU tar attempts to restore the exact state the file system had when the archive was created. In particular, it will delete those files in the file system that did not exist in their directories when the archive was created.

Para implementar isso, eles precisariam de um arquivo especial dentro do archive contendo uma lista de todos os arquivos excluídos ou uma cópia de todos os inodes do diretório para que os arquivos relevantes pudessem ser removidos. Para manter-se em linha com o formato de arquivo, provavelmente era mais simples incluir os diretórios em vez de complicar as coisas com um arquivo adicional.

    
por 22.05.2017 / 00:44