Como fazer tar para ignorar o último tempo modificado de arquivos / diretórios

4

Estou usando tar para fazer backup de um diretório. Alguns arquivos / diretórios ' last-modified-time serão atualizados, mas o conteúdo permanece. Gostaria de obter um tarball com o binário se o conteúdo dos arquivos de diretório não fosse modificado.

No entanto, desde que o last-modified-time atualize, o binário gerado pelo tarball é diferente.

Existe uma maneira de deixar tar ignorar last-modified-time ? Para que eu possa obter o mesmo binário, desde que o conteúdo não seja alterado.

    
por Mine 13.01.2016 / 10:43

1 resposta

4

Parece que você não está apenas procurando por um mtime fixo dentro do TAR, mas por um tarball idêntico bit-a-bit, dado que os arquivos em si são idênticos. Isso é realmente mais complexo do que se pensa.

Dependendo da sua situação, nem todos os pontos podem ser relevantes, mas estou listando-os aqui para ficarem completos. No GNU tar você pode fazer o seguinte:

  • defina o mtime usando --mtime=<date> . A partir da versão 1.29 (no Debian 1.28-1 on, você pode usar --clamp-mtime para definir o tempo real do arquivo somente para arquivos / mais recentes / que o tempo fornecido. Isto é útil quando você quer dar aos arquivos gerados um timestamp comum. , mas deixe os outros arquivos sozinhos.
  • Para ter uma ordem previsível de arquivos no arquivo, use --sort=name (GNU tar 1.28 ou posterior). O comportamento padrão é --sort=none , que armazena arquivos na ordem de diretórios.
  • --owner=0 --group=0 --numeric-owner para definir o proprietário (se você estiver criando o TAR de diferentes usuários).
  • as permissões podem ser diferentes devido a uma umask diferente. Use chmod antes da criação do arquivo ou use --mode=<CHANGES> para alterá-los para que fiquem consistentes.

A iniciativa Reproducible Builds tem um artigo sobre a geração de arquivos idênticos bit-a-bit .

O artigo também fornece algumas soluções alternativas para versões mais antigas do tar, que também podem funcionar com outras implementações do TAR. Uma solução alternativa para o mtime especificamente é que você pode usar touch antes de criar o TAR para definir o mtime como um valor fixo para todos os arquivos mais novos que uma determinada data. Para uma ordem previsível dentro do arquivo, use find e sort para passar uma lista de arquivos ordenada para TAR.

find build -print0 | LC_ALL=C sort -z
  | tar --no-recursion --null -T - -cf product.tar

Consulte a documentação do GNU TAR e manpage para informações sobre as opções individuais.     

por 10.09.2017 / 23:51

Tags