Il est préférable de lister un hachage pour chaque fichier, et de vérifier chaque hachage. Si vous faites un hachage de tous les fichiers, et que l'un d'entre eux est corrompu, vous ne saurez pas lequel est corrompu. Mais si vous listez les hachages pour chaque fichier, un script peut vous dire quand un hachage ne correspond pas (ce qui vous indiquera qu'un fichier est corrompu ou modifié).
De même, le hachage récursif avec find
est plus simple que tant de tuyauterie :
find . -type f -print0 | xargs -0 openssl dgst -sha256 -r >> hashes.sha256
Vous voudrez ajouter la sortie via >>
car xargs invoquera openssl
plusieurs fois, mais seulement aussi souvent que nécessaire pour traiter tous les fichiers (pas par exemple une invocation par fichier). -r
est pour la syntaxe des fichiers de hachage de coreutils. Vous ne souhaitez pas utiliser la syntaxe -out
con xargs
car il écrasera le fichier à chaque invocation. De plus, vous pouvez vouloir capturer STDERR, au cas où OpenSSL ne pourrait pas lire/ouvrir certains fichiers : 2>> error.log
Si le stockage n'est pas un goulot d'étranglement, vous pouvez utiliser l'outil de gestion de l'espace. -P n
argument de xargs
pour exécuter plusieurs processus OpenSSL en parallèle (non recommandé pour les disques durs).
note : Les GNU coreutils (md5sum etc.) utilisent OpenSSL comme bibliothèque pour le hachage. Mais vous pouvez toujours vouloir utiliser OpenSSL à la place si vos coreutils sont très obsolètes : Support pour H/W Accélération du SHA-hash n'a été ajouté que récemment à OpenSSL. SHA1/SHA256 peuvent être plus rapides que MD5 sans accélération, et sont définitivement dans la gamme du gigabit/s avec elle.