arquivando arquivos sem carimbo de data/hora

arquivando arquivos sem carimbo de data/hora

Preciso arquivar alguns arquivos de forma determinística, para obter o mesmo arquivo se o conteúdo dos arquivos for o mesmo. Preciso disso para testar a igualdade dos arquivos posteriormente.

no entanto, tar inclui as informações de carimbo de data e hora e, portanto, obtenho diferentes arquivos compactados, mesmo que o conteúdo dos arquivos seja o mesmo.

como posso criar um arquivo (com tar, zip ou qualquer outra coisa) que não inclua informações de carimbo de data/hora?

Observação: estou ciente de que, mesmo que os dois arquivos tar sejam diferentes, posso ignorar seus carimbos de data e hora e comparar apenas seu conteúdo com ferramentas como tar --diffou tarsum. No entanto, não tenho permissão para usar nenhuma outra ferramenta externa para comparação (devido à minha configuração); Só posso testar a igualdade exata dos dois arquivos compactados.

Observação: estou ciente de que poderia definir o carimbo de data/hora de todos os arquivos para um determinado valor antes de arquivá-los, para que seus carimbos de data/hora fossem os mesmos. No entanto, há muitos arquivos e não quero fazer isso. Eu só quero arquivar esses arquivos sem informações de carimbo de data/hora

exemplo:

$ mkdir copy1
$ touch copy1/file1
$ touch copy1/file2

$ sleep 60
$ mkdir copy2
$ touch copy2/file1
$ touch copy2/file2

$ ls -l copy1
total 0
-rw-r--r--  1 david  wheel  0 Oct 27 00:59 file1
-rw-r--r--  1 david  wheel  0 Oct 27 00:59 file2

$ ls -l copy2
total 0
-rw-r--r--  1 david  wheel  0 Oct 27 01:00 file1
-rw-r--r--  1 david  wheel  0 Oct 27 01:00 file2

# the content of those files is the same; they only differ by the their timestamp    

$ (cd copy1; tar -cvf ../copy1.tar .)
$ (cd copy2; tar -cvf ../copy2.tar .)

$ tar -tvf copy1.tar
drwxr-xr-x  0 david  wheel       0 Oct 27 00:59 ./
-rw-r--r--  0 david  wheel       0 Oct 27 00:59 ./file1
-rw-r--r--  0 david  wheel       0 Oct 27 00:59 ./file2

$ tar -tvf copy2.tar
drwxr-xr-x  0 david  wheel       0 Oct 27 01:00 ./
-rw-r--r--  0 david  wheel       0 Oct 27 01:00 ./file1
-rw-r--r--  0 david  wheel       0 Oct 27 01:00 ./file2

$ diff copy1.tar copy2.tar 
Binary files copy1.tar and copy2.tar differ

Eu tentei com zip -Xem vez de tar, mas obtive o mesmo resultado

Responder1

Mesmo se você desabilitar totalmente o carimbo de data/hora, eu não teria 100% de certeza de que isso salvaria você em todos os casos. Na verdade, a ordem dos arquivos pode alterar os resultados (ou seja, "tar cf a.tar arquivo1 arquivo2" difere de "tar cf b.tar arquivo2 arquivo1", mas pela sua especificação o conteúdo é o mesmo e a ordem pode depender do sistema de arquivos ).

Eu sugeriria que você fizesse algo mais articulado do que apenas uma comparação de arquivos como você disse (md5sum e assim por diante).

Se você realmente deseja apenas uma comparação de arquivo idiota para funcionar, posso sugerir um shell simples que cole os arquivos com um cabeçalho de nome de arquivo, como:

for i in file1 file2; do echo "$i"; cat $i; done; 

É claro que você pode compactar com gzip, se quiser. E tome cuidado para sempre preservar a ordem.

Responder2

Para comparar o conteúdo dos arquivos Zip, você pode usar a ferramenta comp_zip de código aberto @https://sourceforge.net/projects/unzip-ada/ouhttps://github.com/zertovitch/zip-ada/.

O comando é comp_zip file1.zip file2.zip; existem opções para verbosidade.

Responder3

Você pode usar a opção --mtimepara definir um carimbo de data/hora explícito:

$ tar --help
...
 Handling of file attributes:
...
      --mtime=DATE-OR-FILE   set mtime for added files from DATE-OR-FILE
...
$ tar --version
tar (GNU tar) 1.29
Copyright (C) 2015 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by John Gilmore and Jay Fenlason.

informação relacionada