Pour une raison indéterminée, K3B plante de temps en temps lors de la vérification de mes gravures de Bluray. Je suis donc obligé de vérifier « à la main » les fichiers. Rien de bien compliqué sous Linux, deux commandes suffisent.
Vérification des données avec la somme MD5
Une solution simple pour vérifier l’intégrité de fichiers est l’utilisation d’une somme de contrôle. Plusieurs algorithme existe, le plus connu reste la somme MD5. La somme MD5 est une « signature » unique (quoique des collisions existent, c’est pour cela qu’il ne faut plus l’utiliser pour de la cryptographie) d’un fichier. La commande md5sum
de linux permet de calculer la somme d’un fichier mais aussi (et c’est un peu moins connu) de vérifier des fichiers en utilisant leurs sommes de contrôle.
Création des sommes de contrôle
Les sommes de contrôle sont calculées avec un groupement d’instructions assez simple :
- un
find
permet de retrouver tous les fichiers - un
xargs
permet d’utiliser les noms de fichiers (en spécifiant\n
comme caractère de séparation pour que les noms de fichiers comportant des espaces soient bien pris en compte). - le calcul de la somme MD5 est réalisé par
md5sum
.
Le résultat des somme est placé dans un fichier stocké dans le répertoire temporaire (/tmp
), il sera automatiquement supprimé par le système. En une ligne (exécutée dans le répertoire source) ça donne :
find . -type f | xargs -d'\n' md5sum > /tmp/chksum.md5
Vérification des fichiers
La commande md5sum permet aussi de vérifier des fichiers à partir d’une liste de sommes de contrôle avec l’option -c
. Dans le répertoire des copies, la commande fait tout le travail de vérification :
md5sum -c /tmp/chksum.md5 1>/dev/null
La redirection de la sortie standard vers /dev/null
permet de ne garder l’affichage que des erreurs et donc des fichiers non/mal copiés.
Références
- L’idée générale vient de Michael Simons.
- La différence entre l’option
exec
etxargs
est donnée sur : http://www.tuteurs.ens.fr/unix/exercices/solutions/find-sol.html - Changer le caractère de fin de bloc pour
xargs
est détaillé sur Stackoverflow