checkmd5.sh
Nombre: checkmd5.sh
Autor: Fidel Ramos (Haplo)
Origen: original.
Lenguaje: Bash.
Licencia: GPL.
Propósito: comprueba que la grabación de un CD o DVD coincide con los ficheros en disco duro.
Dependencias: md5sum (paquete coreutils).
Código:
#!/bin/bash
# Comprueba que los ficheros pasados como entrada coinciden
# con sus equivalentes en un CD o DVD grabado
#
# Creado por Fidel Ramos (aka Haplo)
#
# Distribuido bajo licencia GPL.
#
# TODO: Parsear opciones mediante getopt
# BUG: Tratar correctamente ficheros que comiencen por -
BADFILES=0
CHECK=`which md5sum`
DVD="/media/cdrom1"
if [ -n "$1" ]; then
if ! mount $DVD 2>/dev/null
then
echo "Error montando $DVD"
exit 1
fi
echo "Calculando suma MD5 de los ficheros indicados..."
IFS='
'
FILES=`find "$@" -type f -print | sort`
declare -a HASH
n=0
for i in $FILES
do
HASH[n]=`nice -19 "$CHECK" "$i" | cut -d' ' -f1`
n=$((n+1))
done
n=0
for i in $FILES
do
echo -n Comprobando "$i" ...\
CRC=`nice -19 "$CHECK" "$DVD"/"$i" | cut -d' ' -f1`
if [ ${HASH[n]} != "$CRC" ]
then
echo 'Error, MD5 no coincide.'
BADFILES=$((BADFILES+1))
else
echo 'OK'
fi
n=$((n+1))
done
echo -e "\nSe han detectado $BADFILES errores."
umount $DVD 2>/dev/null
else
echo "Uso: `basename $0` directorio"
fi
exit 0
Ejemplos de uso: este script debe llamarse desde el directorio que contiene los ficheros y directorios grabados en el CD/DVD a verificar. Si por ejemplo el contenido que se ha grabado en CD o DVD está en /DVD, para ejecutar el script habría que cambiar primero a dicho directorio:
cd /DVD
checkmd5 *Es importante que la llamada al script se realice exactamente desde el directorio que se ha grabado en CD/DVD. Dicho directorio no debería contener ningún fichero que no haya sido grabado, es decir, su contenido debería equivaler al del CD/DVD.
Comentarios: hay que editar manualmente el script y cambiar la variable DVD para que apunte al directorio en el que se montan los DVDs en el sistema (en Debian por defecto /media/cdromX).