Générer la somme de contrôle md5 pour tous les fichiers d'un répertoire

59

Je voudrais créer une liste de contrôle md5 pour tous les fichiers d’un répertoire.

Je veux cat filename | md5sum > ouptput.txt . Je veux le faire en 1 étape pour tous les fichiers de mon répertoire.

Toute aide serait formidable.

    
posée Walter Wayne Leutwyler 10.07.2013 - 16:24
la source

3 réponses

89

Vous pouvez transmettre les noms de fichiers multiples ou les extensions bash md5sum :

$ md5sum * > checklist.chk  # generates a list of checksums for any file that matches *
$ md5sum -c checklist.chk   # runs through the list to check them
cron: OK
database.sqlite3: OK
fabfile.py: OK
fabfile.pyc: OK
manage.py: OK
nginx.conf: OK
uwsgi.ini: OK

Si vous voulez avoir de la fantaisie, vous pouvez utiliser des choses comme find pour explorer et filtrer les fichiers, ainsi que pour travailler de manière récursive:

find -type f -exec md5sum "{}" + > checklist.chk
    
réponse donnée Oli 10.07.2013 - 16:28
la source
9

Un excellent programme de création / vérification de somme de contrôle est rhash. Il crée même des fichiers compatibles SFV et les vérifie également.

Il supporte md4, md5, sha1, sha512, crc32 et beaucoup d'autres.

De plus, il peut créer des récursifs (option -r) comme md5deep ou sha1deep.

Last but not least, vous pouvez formater la sortie du fichier de somme de contrôle; par exemple:

rhash --md5 -p '%h,%p\n' -r /home/

génère un fichier CSV incluant le chemin complet des fichiers, en commençant par le répertoire /home .

Je trouve extrêmement utile même l'option -e renomme les fichiers en insérant la somme crc32 dans le nom.

Vous pouvez changer "md5sum" avec "rhash" dans les exemples PhoenixNL72.

    
réponse donnée Marcolino 27.05.2014 - 11:34
la source
5

Voici deux exemples plus détaillés:

  1. Créez un fichier md5 dans chaque répertoire qui n'en a pas déjà un, avec des chemins absolus:

    find "$PWD" -type d | sort | while read dir; do [ ! -f "${dir}"/@md5Sum.md5 ] && echo "Processing " "${dir}" || echo "Skipped " "${dir}" " @md5Sum.md5 already present" ; [ ! -f "${dir}"/@md5Sum.md5 ] &&  md5sum "${dir}"/* > "${dir}"/@md5Sum.md5 ; chmod a=r "${dir}"/@md5Sum.md5;done 
    
  2. Créez un fichier md5 dans chaque dossier qui n'en a pas déjà un: pas de chemin, seulement des noms de fichiers:

    find "$PWD" -type d | sort | while read dir; do cd "${dir}"; [ ! -f @md5Sum.md5 ] && echo "Processing " "${dir}" || echo "Skipped " "${dir}" " @md5Sum.md5 allready present" ; [ ! -f @md5Sum.md5 ] &&  md5sum * > @md5Sum.md5 ; chmod a=r "${dir}"/@md5Sum.md5 ;done 
    

Ce qui diffère entre 1 et 2 est la manière dont les fichiers sont présentés dans le fichier md5 résultant.

Les commandes effectuent les opérations suivantes:

  1. Construisez une liste de noms de répertoires pour le dossier en cours. (Arbre)
  2. Trier la liste des dossiers.
  3. Vérifiez dans chaque répertoire si le fichier @ md5sum.md5 existe. Sortie Ignoré s'il existe, sortie Traitement s'il n'existe pas.
  4. Si le fichier @ md5Sum.md5 n’existe pas, md5Sum en générera un avec les sommes de contrôle de tous les fichiers du dossier. 5) Définissez le fichier @ md5Sum.md5 généré en lecture seule.

La sortie de ce script entier peut être redirigée vers un fichier (.....; done & gt; test.log) ou redirigé vers un autre programme (comme grep). La sortie vous indiquera uniquement les répertoires qui ont été ignorés et qui ont été traités.

Après une exécution réussie, vous vous retrouverez avec un fichier @ md5Sum.md5 dans chaque sous-répertoire de votre répertoire actuel

J'ai nommé le fichier @ md5Sum.md5 pour qu'il apparaisse en haut du répertoire dans un partage Samba.

La vérification de tous les fichiers @ md5Sum.md5 peut être effectuée par les commandes suivantes:

find "$PWD" -name @md5Sum.md5 | sort | while read file; do cd "${file%/*}"; md5sum -c @md5Sum.md5; done > checklog.txt

Ensuite, vous pouvez grep le checklog.txt en utilisant grep -v OK pour obtenir une liste de tous les fichiers qui diffèrent.

Pour régénérer un @ md5Sum.md5 dans un répertoire spécifique, lorsque vous avez modifié ou ajouté des fichiers, par exemple, supprimez le fichier @ md5Sum.md5 ou renommez-le et exécutez à nouveau la commande generate.

    
réponse donnée PhoenixNL72 31.07.2013 - 19:00
la source

Lire d'autres questions sur les étiquettes