J'ai un fichier téléchargé avec succès et un autre téléchargement échoué (seulement les 100 premiers Mo d'un gros fichier) que je soupçonne être le même fichier.
Pour vérifier cela, je voudrais vérifier leurs hachages, mais comme je n'ai qu'une partie du fichier téléchargé sans succès, je veux seulement hacher les premiers mégaoctets.
Comment puis-je faire cela?
Le système d'exploitation serait Windows, mais j'ai installé cygwin et MinGW.
Réponses:
Créer des hachages pour comparer des fichiers est logique si vous comparez un fichier à plusieurs ou lorsque vous comparez plusieurs fichiers les uns aux autres.
Cela n'a aucun sens lorsque vous comparez deux fichiers une seule fois: l'effort pour calculer les hachages est au moins aussi élevé que de parcourir les fichiers et de les comparer directement.
Un outil de comparaison de fichiers efficace est
cmp
:Vous pouvez également le combiner avec
dd
pour comparer des parties arbitraires (pas nécessairement depuis le début) de deux fichiers, par exemple:la source
cmp
est à 99,99% certain d'être déjà installé si vous avez enbash
cours d' exécution, et il fait le travail. En effet,cmp -n 131072 one.zip two.zip
fera également le travail. Moins de caractères à taper et exécution la plus rapide. Calculer un hachage est absurde. Il nécessite la lecture de l'intégralité du fichier de 100 Mo , plus une partie de 100 Mo du fichier complet, ce qui est inutile. S'il s'agit de fichiers zip et qu'ils sont différents, il y aura une différence dans les quelques centaines de premiers octets. Readahead fournit cependant 128 Ko par défaut, vous pouvez donc également comparer 128 Ko (même coût que la comparaison avec 1 octet).--bytes
option ne fait que compliquer la tâche. Exécutez simplementcmp
sans cette option et il vous montrera le premier octet qui diffère entre les fichiers. Si tous les octets sont identiques, cela s'afficheraEOF
sur le fichier le plus court. Cela vous donnera plus d'informations que votre exemple - combien d'octets sont corrects.cmp
(et, je pense que presque tout le monde en a), vous pouvez utiliser des arguments--ignore-initial
et--bytes
au lieu de compliquer les choses avec des invocations dedd
.Je suis désolé, je ne peux pas vraiment essayer ça, mais ça fonctionnera
Cela vous permettra d'obtenir les 100 premiers mégaoctets des deux fichiers.
Maintenant, récupérez les hachages:
Vous pouvez également l'exécuter directement:
la source
cmp
).cmp
) est sans aucun doute gagnante. Mais cette façon de résoudre le problème (en utilisant des hachages) a également le droit d'exister tant qu'elle résout le problème (:Tout le monde semble suivre la voie Unix / Linux avec cela, mais simplement comparer 2 fichiers peut facilement être fait avec les commandes standard de Windows:
FC /B file file2
FC est présent sur toutes les versions de Windows NT jamais réalisées. Et (si je me souviens bien) était également présent sous DOS.
C'est un peu lent, mais cela n'a pas d'importance pour une utilisation unique.
la source
Vous pouvez simplement comparer directement les fichiers, avec un programme de comparaison binaire / hexadécimal comme
vbindiff
. Il compare rapidement les fichiers jusqu'à 4 Go sur Linux et Windows.Ressemble à quelque chose comme ça, seulement avec la différence surlignée en rouge (1B vs 1C):
la source
vbindiff
(et Konradcmp
) compare les données binaires, octet par octet. En fait, les valeurs sont beaucoup plus susceptibles de subir des collisionsJe sais que cela dit pour Bash, mais OP indique également qu'ils ont Windows. Pour tous ceux qui veulent / nécessitent une solution Windows, il existe un programme appelé HxD qui est un éditeur hexadécimal qui peut comparer deux fichiers. Si les fichiers sont de tailles différentes, il dira si les pièces disponibles sont les mêmes. Et si besoin est, il est capable d'exécuter des sommes de contrôle pour tout ce qui est actuellement sélectionné. Il est gratuit et peut être téléchargé à partir du site Web HxD . Je n'ai aucun lien avec les auteurs, je l'utilise depuis des années.
la source
cmp vous indiquera quand deux fichiers sont identiques jusqu'à la longueur du fichier plus petit:
cmp vous indique que la comparaison a rencontré un EOF sur le fichier a avant de détecter une différence entre les deux fichiers.
la source