archivar archivos sin marca de tiempo

archivar archivos sin marca de tiempo

Necesito archivar algunos archivos de forma determinista, para obtener el mismo archivo si el contenido de los archivos es el mismo. Necesito esto para probar la igualdad de los archivos comprimidos más adelante.

sin embargo, tar incluye la información de la marca de tiempo, por lo que obtengo archivos diferentes 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 sólo su contenido con herramientas como tar --diffo tarsum. Sin embargo, no puedo utilizar ninguna otra herramienta externa para comparar (debido a mi configuración); Simplemente puedo probar los dos archivos para verificar 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 archivarlos, por lo que sus marcas de tiempo serían las mismas. Sin embargo, hay muchos archivos y no quiero hacer esto. Sólo 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

Intenté con zip -Xen lugar de tar, pero obtengo el mismo resultado.

Respuesta1

Incluso si deshabilitas totalmente 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" difiere de "tar cf b.tar file2 file1" pero según sus especificaciones el contenido es el mismo y el orden puede depender del sistema de archivos ).

Le sugeriría que haga algo más articulado que simplemente comparar archivos como usted dijo (md5sum, etc.).

Si realmente desea comparar un archivo tonto para que funcione, 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, puedes comprimirlo si lo deseas. Y tenga cuidado de preservar siempre el orden.

Respuesta2

Para comparar el contenido de los archivos Zip, puede utilizar la herramienta comp_zip de código abierto @https://sourceforge.net/projects/unzip-ada/ohttps://github.com/zertovitch/zip-ada/.

El comando es comp_zip file1.zip file2.zip; hay interruptores para la verbosidad.

Respuesta3

Puede utilizar la opción --mtimepara establecer una marca de tiempo explícita:

$ 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.

información relacionada