También encontré this link. Pero me preguntaba si hay alguna solución de línea de comandos lista para usar.¿Cómo comprobar si un archivo .tar.gz de Unix es un archivo válido sin descomprimir?
Respuesta
¿Qué tal si acabamos de obtener una lista del tarball y desechamos la salida, en lugar de descomprimir el archivo?
tar -tzf my_tar.tar.gz >/dev/null
Editado según el comentario. Gracias zrajm!
Editar como por 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.
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
Para probar el archivo gzip no está dañado:
gunzip -t file.tar.gz
Para probar que el archivo tar no está dañado en el interior:
gunzip -c file.tar.gz | tar t > /dev/null
Como parte de la copia de seguridad probablemente solo podría ejecutar el último comando y comprobar 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.
'gunzip -t file.gz': Esta prueba puede pasar, sin embargo, no prueba la integridad del archivo de archivo de cinta (tar). –
Gracias Felipe, he incorporado tu valioso aporte en la respuesta. – spacediver
Y 'bzip2 -t file.bz2' para archivos bz2. – asmeurer
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 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*
Me parece que la mejor prueba es esta. Realmente extrae cada archivo y se asegura de que no haya errores. – sleeves
Realmente útil. He hecho un script de shell, agregué un argumento hook para pasar la ruta del archivo y ponerlo en mi ruta :) [tar -xvzf $ 1 -O>/dev/null] – smonff
@sleeves ¿Por qué crees que es mejor que la respuesta aceptada? tar -tvzf hello.tgz>/dev/null también da el mismo error. – dash17291
> use the -O option. [...] If the tar file is corrupt, the process will abort with an 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 $?
alquitrán dijo que no hubo error:
0
pero el archivo estaba dañado, tiene n ow "Fool" en lugar de "Pete".
También puede consultar los contenidos de * .tag.gz archivo 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
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
dañado archivo tar:
> tar -tvvf corrupted.tar
tar: Unrecognized archive format
Archive Format: (null), Compression: none
tar: Error exit delayed from previous errors.
Esto ocurre en BSD tar pero no en GNU tar. – mcallister
He intentado el siguiente comando y funcionan bien.
bzip2 -t file.bz2
gunzip -t file.gz
Sin embargo, podemos encontrar que estos dos comandos son lentos. Quizás necesitemos una forma más rápida de determinar la integridad de los archivos comprimidos.
Estas son soluciones muy poco óptimas. Desde el GZIP spec
ID2 (IDentification 2)
These have the fixed values ID1 = 31 (0x1f, \037), ID2 = 139 (0x8b, \213), to identify the file as being in gzip format.
tiene que ser codificado en cualquier idioma que está utilizando.
- 1. descomprimir un archivo tar.gz en R?
- 2. ¿Cómo comprobar si un archivo es válido UTF-8?
- 3. ¿Cómo comprobar si un puntero es válido?
- 4. Comprobar si el descriptor de archivo es válido
- 5. Comprobar si un archivo es una imagen
- 6. ¿Cómo puedo descomprimir un archivo tar.bz en Unix?
- 7. Cómo comprobar si un archivo existe en un archivo MAKE
- 8. cómo comprobar si el archivo pdb es válido para la depuración de un conjunto
- 9. Cómo descomprimir un archivo javascript?
- 10. Unix: anteponer un archivo sin un archivo ficticio?
- 11. Extraer un archivo de tar.gz, sin tocar el disco
- 12. Compruebe si un archivo PDF es válido (Python)
- 13. ¿Cómo puedo determinar si un archivo es un archivo PDF?
- 14. cómo comprobar si un archivo es un directorio o un archivo normal en python?
- 15. ¿Cómo comprobar si el archivo es binario?
- 16. La forma más fácil de comprobar si una Cadena arbitraria es un nombre de archivo válido
- 17. Comprobar si existe el archivo sin crear
- 18. Excluyendo directorio al crear un archivo .tar.gz
- 19. Python: ¿Cómo comprobar si una cadena es un IRI válido?
- 20. Crear archivo zip o tar.gz sin ejecutivo
- 21. Android: Cómo descomprimir un archivo zip encriptado
- 22. descomprimir un archivo usando C#
- 23. Cómo descomprimir un archivo zip C#
- 24. Error al comprobar si existe un archivo
- 25. Comprobar si un nombre de archivo es una carpeta o un archivo
- 26. Comprobar en Javascript si un certificado SSL es válido
- 27. ¿Cómo descomprimir un archivo 7zip en Android?
- 28. ¿Cómo comprobar si un archivo cargado es una imagen sin tipo de mime?
- 29. ¿Cómo comprobar si existe un directorio que contiene un archivo?
- 30. ¿Cómo puedo saber si un archivo en un FTP es idéntico a un archivo local sin realmente descargar el archivo?
¿Por qué usar '-v' si solo está conectando la salida a'/dev/null'? – zrajm
True @zrajm. ¡Adivina que es mi memoria muscular pateando! (-: –
La opción '-z' tampoco es necesaria. No hace nada en el modo de extracción o de lista. – asmeurer