Pregunta

He encontrado la cuestión cómo determinar si los datos son archivo tar válido sin un archivo , pero me preguntaba: ¿hay una solución línea de comandos ya hecha

?
¿Fue útil?

Solución

¿Qué pasa con sólo conseguir una lista del archivo comprimido y tirar la salida, en lugar de descomprimir el archivo?

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

Editado según comentario. Gracias zrajm!

Editar según comentario. Gracias Frozen Flame! Esta prueba no implica en absoluto la integridad de los datos. Debido a que fue diseñado como una utilidad de archivos de cinta mayoría de las implementaciones de alquitrán permitirán múltiples copias del mismo archivo!

Otros consejos

que probablemente se podría utilizar la opción -t gzip para probar la integridad de los archivos

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

a partir de: 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 en el interior no está dañado:

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

Como parte de la copia de seguridad que probablemente podría simplemente ejecutar el último comando y comprobar el valor de $? después por un valor 0 (éxito). Si bien el alquitrán o el gzip tiene un problema, $? tendrá un valor distinto de cero.

Si usted quiere hacer un extracto de prueba real de un archivo tar sin necesidad de extraer el disco, utilice 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 se aborta con un error.

Ejemplo de ensayo de la bola de alquitrán fallado ...

$ 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 comprobar el contenido del archivo * .tag.gz usando pigz (gzip paralelo) a speedup la comprobación de archivo:

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

He intentado el siguiente comando y funcionan bien.

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

Sin embargo, podemos encontramos estos dos comandos son mucho tiempo. Tal vez necesitamos alguna manera más rápida para determinar el intacta de los archivos Comprimir.

Una buena opción es utilizar tar -tvvf <filePath> que añade una línea que informa sobre el tipo de archivo.

Ejemplo de 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.

Estas son todas las soluciones muy sub-óptimos. Desde el GZIP spec

  

ID2 (identificación 2)
  Éstos tienen los valores fijos ID1 = 31 (0x1F, \ 037), ID2 = 139   (0x8B, \ 213), para identificar el archivo como estar en formato gzip.

Tiene que ser codificado en cualquier idioma que está utilizando.

  

> utilizar la opción -O. [...] Si el archivo tar está dañado, el proceso se aborta 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  

Aunque ejecute

echo $?

tar dijo que no hubo error:

0

pero el archivo se corrompió, ahora se ha "tonto" en lugar de "Pete".

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top