Je voudrais trouver un md5sum
(ou un calcul similaire) d'un dossier sans le compresser dans une archive.
Par exemple, si dans le dossier que MyFolder
nous avons les fichiers 1.txt
, 2.txt
et 3.txt
, contenant:
1.txt
Le texte en 1.txt
2.txt
Le texte en 2.txt
3.txt
Le texte en 3.txt
Comment puis-je calculer la md5sum
totalité de cet ensemble MyFolder
? Y a-t-il un moyen? Je veux l'utiliser pour vérifier si deux dossiers ont le même contenu.
Cela peut être utilisé pour vérifier si deux CD ou dossiers sont égaux. J'aimerais un moyen simple de le faire.
files
checksum
verification
GarouDan
la source
la source
sudo apt-get install md5deep
md5deep -rel /path/to/your/directory/ > directory_hash.md5
md5deep -X directory_hash.md5 -r /path/to/your/second/direcotory
Thx beaucoup.-o
option pour gérer les types de fichiers.Si vous ne voulez pas l'archiver, vous pourriez peut-être faire quelque chose comme ça
Vous devrez peut-être adapter les
find
commandes pour être plus précis.MODIFIER Vous pouvez ajouter
-exec
à votre appel de recherche pour comparer le contenu des fichiers. Quelque chose de similaire à ceci:N'oubliez pas que vous voudrez peut-être adapter cela.
la source
Une façon de tester pourrait être de générer une somme md5 basée sur la concaténation de tous les fichiers du dossier et de ses sous-dossiers. Gardez à l'esprit que cela nécessite également que les fichiers aient les mêmes noms (car ils doivent être dans le même ordre de tri). Le code suivant devrait fonctionner:
Si vous vous souciez vraiment des noms de fichiers, etc., vous pouvez utiliser une boucle pour comparer ce qui se trouve dans
${_files_in_old_dir}
et${_files_in_new_dir}
. Cela devrait fonctionner dans la plupart des cas (il vérifie au moins le nombre de fichiers dans le répertoire et ses sous-répertoires).la source
globstar
. Quelle est l'erreur?J'ai remarqué que le message d'origine est assez ancien, cependant, je pense que ces informations peuvent toujours être utiles à ceux qui recherchent une solution pour vérifier que les fichiers sont copiés correctement. Rsync pourrait être la meilleure méthode pour copier les données et les réponses données dans ce fil sont bonnes, cependant pour ceux qui ne sont pas expérimentés avec Linux, j'essaierai de donner une explication plus détaillée.
Scénario: vous venez de copier des données d'un disque à un autre, avec de nombreux sous-répertoires et fichiers. Vous souhaitez vérifier que toutes les données sont copiées correctement.
Vérifiez d'abord que md5deep est installé en exécutant la commande
md5deep -v
.Si vous obtenez un message disant quelque chose comme «commande introuvable», installez md5deep par
apt-get install md5deep
.Il est supposé que vous ne souhaitez traiter que des fichiers standard. Si vous souhaitez traiter d'autres types de fichiers, reportez-vous à l'indicateur -o dans le manuel md5deep. (
man md5deep
)Maintenant, vous êtes prêt à partir, et nous supposons que vous avez copié des fichiers de
/mnt/orginal
à/mnt/backup
, remplacez-les par tous les répertoires que vous utilisez.Modifiez d'abord le répertoire source, il s'agit de la source d'origine des fichiers que vous avez copiés ou sauvegardés:
cd /mnt/orginal
Faites ensuite une somme de contrôle de chaque fichier:
md5deep -rel -o f . >> /tmp/checksums.md5
Cette commande a expliqué:
-r
active le mode récursif-e
affiche un indicateur de progression-l
active les chemins d'accès relatifs aux fichiers.-o f
ne fonctionne que sur les fichiers normaux (pas les périphériques bloqués, les canaux nommés, etc.).
indique à md5deep de démarrer dans le répertoire courant.>> /tmp/checksums.md5
indique à md5deep de rediriger toutes les sorties vers/tmp/checksums.md5
.Remarque: si vous souhaitez remplacer le contenu des versions précédentes de
/tmp/checksums.md5
, utilisez>
et non>>
Notez que cette commande peut prendre un certain temps, selon la vitesse io et la taille des données. Vous pouvez expérimenter avec nice et / ou ionice pour augmenter les performances de md5deep, mais cela sort du cadre de cette réponse.
Une fois la création des sommes de contrôle terminée, vous disposez désormais d'un fichier contenant des entrées similaires à:
La première colonne est la somme de contrôle md5 et la deuxième colonne est le chemin d'accès relatif au fichier auquel appartient la somme de contrôle.
Si vous souhaitez voir combien de fichiers existent dans le fichier de somme de contrôle, exécutez la commande:
wc /tmp/checksums.md5 -l
Maintenant, vous voulez vérifier que les données copiées sont correctes:
cd /mnt/backup
md5deep -o f -reX /tmp/checksums.md5 . >> /tmp/compare.result
La seule différence par rapport à la création des sommes de contrôle est -X qui affiche le hachage actuel d'un fichier si l'entrée dans le fichier checksums.md5 ne correspond pas . Ainsi, à la fin du test, s'il
/tmp/compare.result
est vide, vous pouvez être sûr que tous les fichiers sont copiés correctement car les sommes de contrôle correspondent.Notez que seuls les fichiers répertoriés dans le
/tmp/checksums.md5
fichier seront vérifiés pour une somme de contrôle correcte, s'il y a des fichiers supplémentaires dans le/mnt/backup
répertoire, md5deep ne vous en informera pas.Remarques:
Vous n'avez pas nécessairement à utiliser la redirection pour stocker les fichiers de sortie. Reportez-vous au manuel md5deep pour plus d'informations.
Vous devrez peut-être exécuter les commandes md5deep en tant que root, selon les autorisations des fichiers que vous gérez.
la source
Si vous souhaitez vérifier récursivement les différences entre deux répertoires
/path1
et/path2
sans utilisermd5deep
:Explication:
path1
pour rendre toutes les lignes imprimées parfind
être relatif àpath1
(cd /path1
)&& find . -type f
)find
comme entrée pourmd5
(| xargs md5
)La sortie ressemblera à ceci s'il y a des différences:
la source