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.
la source
Crypt::Rhash
(md5 + sha1 + tigre - encore assez rapide). Vous pouvez changer mon code pour une meilleure lisibilité et style.séparé de coreutils (la valeur par défaut sur la plupart des distributions Linux) a une
--filter
option que vous pouvez utiliser:la source
Il me semble que vous recherchez ce type d’ outil .
À partir du fichier Lisez-moi de BigSync:
la source
Il était facile d'écrire un petit hasher de 1 Mo à l'aide d'
rhash
outils (librhash
bibliothèque). Il existe un script Perl simple qui crée des sommes de contrôle de chaque partie de 1 Mo du flux d'entrée standard. Il a besoin deCrypt::Rhash
liaisons decpan
:Ce script du domaine public générera un décalage décimal, puis
+
, une taille de bloc, puis des sommes d’entrée md5 et sha1.Par exemple, 2 Mo de zéros ont des sommes:
la source
rsync
fonctionne comme ceci, en calculant une somme de contrôle pour voir s’il existe des différences dans certaines parties du fichier avant d’envoyer quoi que ce soit.Je ne sais pas si cela fonctionnerait bien avec des fichiers aussi volumineux, bien que je n’aie jamais entendu parler d’une limitation de la taille de fichier.
la source
Dirigez la sortie vers ce script Python 2, par exemple
7z e -so image.7z | python md5sum.py
:la source