varios una subcarpetas especifica descomprimir comprimir comando carpeta archivos gzip validation tar gunzip

gzip - una - ¿Cómo verificar si un archivo.tar.gz de Unix es un archivo válido sin descomprimir?



descomprimir tar.gz ubuntu (8)

> use la opción -O. [...] Si el archivo tar está dañado, el proceso abortará con un error.

A veces sí, pero a veces no. Veamos un ejemplo de un archivo dañado:

echo Pete > my_name tar -cf my_data.tar my_name # // Simulate a corruption sed < my_data.tar ''s/Pete/Fool/'' > my_data_now.tar # // "my_data_now.tar" is the corrupted file tar -xvf my_data_now.tar -O

Muestra:

my_name Fool

Incluso si ejecutas

echo $?

tar dijo que no había ningún error:

0

pero el archivo estaba dañado, ahora tiene "Fool" en lugar de "Pete".

También encontré este enlace . Pero me preguntaba si hay alguna solución de línea de comandos lista para usar.


¿Qué hay de simplemente obtener una lista del tarball y tirar la salida, en lugar de descomprimir el archivo?

tar -tzf my_tar.tar.gz >/dev/null

Editado según el comentario. Gracias zrajm!

Edita según el comentario. Gracias Frozen Flame! Esta prueba de ninguna manera implica la integridad de los datos. Debido a que fue diseñado como una utilidad de archivado de cintas, la mayoría de las implementaciones de tar permitirán múltiples copias del mismo archivo.


Estas son todas soluciones muy poco óptimas. De la especificación GZIP

ID2 (IDentificación 2)
Estos tienen los valores fijos ID1 = 31 (0x1f, / 037), ID2 = 139 (0x8b, / 213), para identificar el archivo en formato gzip.

Tiene que estar codificado en cualquier idioma que estés usando.


He intentado el siguiente comando y funcionan bien.

bzip2 -t file.bz2 gunzip -t file.gz

Sin embargo, podemos encontrar que estos dos comandos consumen mucho tiempo. Quizás necesitemos una forma más rápida de determinar la integridad de los archivos comprimidos.


Si desea hacer un extracto de prueba real de un archivo tar sin extraerlo al disco, use la opción -O. Esto arroja el extracto a la salida estándar en lugar del sistema de archivos. Si el archivo tar está dañado, el proceso abortará con un error.

Ejemplo de prueba fallida de bola de alquitrán ...

$ echo "this will not pass the test" > hello.tgz $ tar -xvzf hello.tgz -O > /dev/null gzip: stdin: not in gzip format tar: Child returned status 1 tar: Error exit delayed from previous errors $ rm hello.*

Ejemplo de trabajo ...

$ ls hello* ls: hello*: No such file or directory $ echo "hello1" > hello1.txt $ echo "hello2" > hello2.txt $ tar -cvzf hello.tgz hello[12].txt hello1.txt hello2.txt $ rm hello[12].txt $ ls hello* hello.tgz $ tar -xvzf hello.tgz -O hello1.txt hello1 hello2.txt hello2 $ ls hello* hello.tgz $ tar -xvzf hello.tgz hello1.txt hello2.txt $ ls hello* hello1.txt hello2.txt hello.tgz $ rm hello*


También puede verificar los contenidos del archivo * .tag.gz utilizando pigz (parallel gzip) para acelerar la verificación de archivo:

pigz -cvdp number_of_threads /[...]path[...]/archive_name.tar.gz | tar -tv > /dev/null


Una buena opción es usar tar -tvvf <filePath> que agrega una línea que informa el tipo de archivo.

Ejemplo en un archivo .tar válido:

> tar -tvvf filename.tar drwxr-xr-x 0 diegoreymendez staff 0 Jul 31 12:46 ./testfolder2/ -rw-r--r-- 0 diegoreymendez staff 82 Jul 31 12:46 ./testfolder2/._.DS_Store -rw-r--r-- 0 diegoreymendez staff 6148 Jul 31 12:46 ./testfolder2/.DS_Store drwxr-xr-x 0 diegoreymendez staff 0 Jul 31 12:42 ./testfolder2/testfolder/ -rw-r--r-- 0 diegoreymendez staff 82 Jul 31 12:42 ./testfolder2/testfolder/._.DS_Store -rw-r--r-- 0 diegoreymendez staff 6148 Jul 31 12:42 ./testfolder2/testfolder/.DS_Store -rw-r--r-- 0 diegoreymendez staff 325377 Jul 5 09:50 ./testfolder2/testfolder/Scala.pages Archive Format: POSIX ustar format, Compression: none

Archivo .tar dañado:

> tar -tvvf corrupted.tar tar: Unrecognized archive format Archive Format: (null), Compression: none tar: Error exit delayed from previous errors.


probablemente puedas usar la opción gzip -t para probar la integridad de los archivos

http://linux.about.com/od/commands/l/blcmdl1_gzip.htm

desde: http://unix.ittoolbox.com/groups/technical-functional/shellscript-l/how-to-test-file-integrity-of-targz-1138880

Para probar el archivo gzip no está dañado:

gunzip -t file.tar.gz

Para probar el archivo tar dentro no está dañado:

gunzip -c file.tar.gz | tar t > /dev/null

Como parte de la copia de seguridad, ¿podría simplemente ejecutar el último comando y verificar el valor de $? luego para un valor de 0 (éxito). Si el tar o el gzip tienen un problema, $? tendrá un valor distinto de cero.