varios descomprimir crear consola comprimir comando archivos archivo abrir build timestamp archive tar

build - crear - descomprimir tar.gz ubuntu



¿Cómo crear un archivo tar que omita las marcas de tiempo de sus contenidos? (2)

¿Hay alguna manera de crear un archivo .tar que omita los valores de atime / ctime / mtime para sus archivos / directorios?

Por qué queremos hacer esto?

Tenemos un paso en nuestro proceso de compilación que genera un directorio de artefactos que se empaqueta en un archivo tar. Esperamos que el paso de compilación sea idempotente; dadas las mismas entradas, produce exactamente los mismos archivos / salida cada vez.

Idealmente, nos gustaría también que el paso sea idempotente a nivel de bit a través de compilaciones limpias, de modo que podamos usar hashes de compilaciones sucesivas para comprobar que nada ha cambiado. Pero debido a que los archivos tar incluyen marcas de tiempo (atime / ctime / mtime) para cada entrada, los archivos tar creados por ese paso de compilación nunca son bit a bit idénticos a la ejecución anterior, aunque el contenido de cada archivo dentro del archivo sea idéntico a los bits.

¿Hay alguna manera de generar un archivo tar que omita las marcas de tiempo de sus entradas, de modo que el paso que genera el archivo pueda ser idempotente bit a bit? (Queremos aprovechar otros metadatos de archivos que conserva el tar , como los bits del modo de archivo y los enlaces simbólicos).


Podemos crear el archivo tar sin incluir la marca de tiempo.

1) Crear archivo tar sin compresión e indicación de fecha y hora

tar -cf file_name.tar file_name

2) Crear archivo tar con compresión y sin marca de tiempo

tar -cf file_name | gzip -n > file_name.tar.gz

3) Manera alternativa

GZIP=-n tar -czf file_name.tar.gz file_name

Nota: ''-n'' no agregará marca de tiempo y nombre

4) Para extraer el archivo tar

tar -xf file_name.tar and tar -xzf file_name.tar.gz

Para verificar que puedes hacer esto

file file_name.tar or file_name.tar.gz output = file_name.tar.gz: gzip compressed data, from Unix


GNU tar tiene un argumento --mtime , que se puede usar para almacenar una fecha fija en el archivo en lugar del mtime real de un archivo:

tar --mtime=''1970-01-01'' input ...

Al comprimir un tarball con gzip, también es necesario especificar -n para evitar que el nombre y la marca de tiempo del archivo tar se almacenen:

tar --mtime=''1970-01-01'' input ... | gzip -n >input.tar.gz