Archivar archivos sin marca de tiempo

4

Necesito archivar algunos archivos deterministicamente, de modo que obtenga el mismo archivo comprimido si el contenido de los archivos es el mismo. Necesito esto para probar la igualdad de los archivos de archivo más tarde.

sin embargo, tar incluye la información de la marca de tiempo, por lo que obtengo diferentes archivos de archivo, incluso si el contenido de los archivos es el mismo.

¿Cómo puedo crear un archivo (con tar, zip o algo más) que no incluya información de marca de tiempo?

Nota: soy consciente de que incluso si los dos archivos tar difieren, puedo ignorar sus marcas de tiempo y comparar solo su contenido con herramientas como tar --diff o tarsum. Sin embargo, no puedo usar ninguna otra herramienta externa para realizar comparaciones (debido a mi configuración); Solo puedo probar los dos archivos para la igualdad exacta.

Nota: soy consciente de que podría establecer la marca de tiempo de todos los archivos en un valor determinado antes de archivar los archivos, por lo que sus marcas de tiempo serían las mismas. Sin embargo, hay muchos archivos y no quiero hacer esto. Solo quiero archivar estos archivos sin información de marca de tiempo

ejemplo:

$ 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

Lo intenté con zip -X en lugar de tar, pero me sale el mismo resultado

David Portabella
fuente

Respuestas:

0

Incluso si deshabilitas de alguna manera la marca de tiempo, no estaría 100% seguro de que te salvaría en todos los casos. De hecho, el orden de los archivos podría cambiar los resultados (es decir, "tar cf a.tar file1 file2" se diferencia de "tar cf b.tar file2 file1" pero según su especificación, el contenido es el mismo y el orden puede depender del sistema de archivos ).

Le sugiero que tenga que hacer algo más articulado que solo un archivo de comparación como dijo (md5sum y así sucesivamente).

Si realmente desea que un archivo simple se compare con el trabajo, puedo sugerirle un shell simple que pegue los archivos con un encabezado de nombre de archivo como:

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

Por supuesto, puede gzip si lo desea. Y tenga cuidado de mantener siempre el orden.

fede.evol
fuente