arquivando arquivos sem timestamp

3

Eu preciso arquivar alguns arquivos deterministicamente, para que eu obtenha o mesmo arquivo se o conteúdo dos arquivos for o mesmo. Eu preciso disso para testar a igualdade dos arquivos depois.

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

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

Observação: estou ciente de que, mesmo que os dois arquivos tar sejam diferentes, posso ignorar os registros de data e hora deles e comparar apenas o conteúdo deles com ferramentas como tar --diff ou tarsum . No entanto, não tenho permissão para usar qualquer outra ferramenta externa para comparação (devido à minha configuração); Eu só posso testar os dois arquivos para a igualdade exata.

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

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 -X em vez de tar , mas obtive o mesmo resultado

    
por David Portabella 27.10.2014 / 01:18

1 resposta

0

Mesmo que você desative de alguma forma totalmente o timestamp, eu não teria 100% de certeza de salvá-lo em todos os casos. Infact 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 por sua especificação, o conteúdo é o mesmo, ea ordem pode ser dependente do sistema de arquivos ).

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

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

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

Você pode, claro, gzip, se quiser. E tenha cuidado para sempre preservar o pedido.

    
por 27.10.2014 / 13:16

Tags