¿Hay alguna solución general para verificar si un archivo está dañado o no? Por ejemplo, si un archivo de video es malo o si un archivo comprimido está dañado, etc.
echo "P = NP" >is-this-corrupt.txt
:)
¿Hay alguna solución general para verificar si un archivo está dañado o no? Por ejemplo, si un archivo de video es malo o si un archivo comprimido está dañado, etc.
echo "P = NP" >is-this-corrupt.txt
:)
Respuestas:
No, no hay soluciones generales. La única forma de verificar si un archivo está dañado es intentar leerlo; solo el software que sabe leer ese formato en particular puede hacerlo.
Lo que puede hacer es usar file
para identificar el tipo de archivo y luego usar el tipo para elegir un programa apropiado para verificar el archivo. Podrías escribir un guión como este:
# /bin/bash -eu
FILENAME=$1
FILETYPE="$(file -b $FILENAME | head -1 | cut -d , -f 1)"
case "$FILETYPE" in
"gzip compressed data") CHECKER="gunzip -t" ;;
# many, many more lines here
*) echo "Unknown type: $FILETYPE"; exit 1 ;;
esac
$CHECKER $FILENAME
Pero tendría mucho trabajo que hacer para completar la declaración del caso.
Es posible que alguien ya haya escrito dicho script (o programa), pero no sé de ninguno.
grep
, cat
, tar
...). Su solución es, por lo tanto, muy hinchada.
cat
, ni ningún otro programa que trate un archivo simplemente como una secuencia no estructurada de bytes, para verificar si hay corrupción. No creo que mi solución esté hinchada.
Si en algún momento sabe que el archivo es bueno, puede hacer una suma de verificación y usarlo para compararlo más tarde para asegurarse de que aún esté completo. Esto es útil antes de transferir archivos entre medios o redes.
Si no sabe sobre el buen estado de un archivo, no, no hay una forma universal de verificar la corrupción. Solo el formato de archivo específico en cada caso determina qué datos están corruptos o no.
Si utiliza ZFS, puede leer el archivo y se garantiza que no está dañado o si tiene un error de lectura y lo está.
Editar Después de los sabios comentarios, aquí hay una aclaración de mi respuesta:
ZFS puede proteger y detectar contra la corrupción silenciosa de datos. por ejemplo: http://www.zdnet.com/blog/storage/data-corruption-is-worse-than-you-know/191 Por supuesto, si el archivo ya está dañado en el momento en que se escribió inicialmente, no hay nada el sistema de archivos puede hacer.
Para protegerse contra la corrupción que ocurriría durante la transmisión del archivo, las técnicas habituales de uso general son md5sum o hashes similares.