Je souhaite effectuer des contrôles sur des fichiers volumineux et les diffuser sous unix / linux, et obtenir de nombreuses sommes de contrôle pour chaque grande partie d'un fichier / flux, tous les 1 Mo ou tous les 10 Mo.
Par exemple, j'ai une image disque, une image disque compressée et la copie du disque d'origine. Certaines parties des images peuvent être modifiées. Le disque a une capacité de 50 Go et environ 50000 blocs de 1 Mo. Donc, pour chaque fichier, je veux obtenir 50 000 md5sum ou sha1sums pour avoir un aperçu des modifications. Seul md5sum ne m'aidera pas à localiser le décalage de modification.
Cette tâche est facile pour une image disque non compressée, avec l’utilisation d’ dd
outil in for
loop in bash avec des décalages informatiques et en sélectionnant (ignorant) chaque partie de fichier de 1 Mo. La même chose avec le disque:
for a in `seq 1 50000`; do echo -n "$a: "; dd if=image.src bs=1M count=1 skip=$a | md5sum; done
Mais maintenant, je veux comparer une image compressée et une image non compressée sans la décompresser sur le disque. J'ai 7z
décompresseur qui peut décompresser l'image sur la sortie standard à grande vitesse, jusqu'à 150-200 Mo / s (options 7z e -so image.7z |
). Mais que puis-je écrire après le |
symbole pour obtenir md5sum de toutes les parties du fichier.
Crypt::Rhash
(md5 + sha1 + tigre - encore assez rapide). Vous pouvez changer mon code pour une meilleure lisibilité et style.