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).