J'aimerais 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.
J'aimerais 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.
Réponses:
Vous pouvez passer md5sum
plusieurs noms de fichiers ou extensions bash:
$ 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 du chic, vous pouvez utiliser des méthodes telles que l' find
exploration et le filtrage des fichiers, ainsi que le travail récursif:
find -type f -exec md5sum "{}" + > checklist.chk
md5sum
les fichiers dans les sous-répertoires, ceux-ci md5sum *
émettant entrant au niveau des sous-répertoires en disant que ... est un répertoire
find -type f -exec md5sum '{}' +
et `find -type f -exec md5sum '{}'` j'ai pu l'obtenir. Merci :)
openssl md5 * > checklist.txt
**
récursivement (tel que zsh), c'est encore plus simple:md5sum **/* 2>/dev/null
Un bon programme de création / vérification de checksum est rhash. Il crée même des fichiers compatibles SFV et les vérifie aussi.
Il supporte md4, md5, sha1, sha512, crc32 et beaucoup d'autres.
De plus, il peut faire une création récursive (option -r) comme md5deep ou sha1deep.
Enfin et surtout, 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 comprenant le chemin complet des fichiers de manière récursive en commençant par le /home
répertoire.
Je trouve extrêmement utile même l’option -e de renommer des fichiers en insérant crc32 sum dans name.
Vous pouvez changer "md5sum" avec "rhash" dans les exemples PhoenixNL72.
Voici deux exemples plus complets:
Créez un fichier md5 dans chaque répertoire qui n'en contient pas déjà, 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
Créez un fichier md5 dans chaque dossier qui n'en contient pas déjà: pas de chemins, uniquement 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 font ce qui suit:
La sortie de tout ce script peut être redirigée vers un fichier (.....; done> test.log) ou redirigée vers un autre programme (comme grep). La sortie vous indiquera uniquement quels répertoires ont été ignorés et lesquels ont été traités.
Après une exécution réussie, vous obtiendrez un fichier @ md5Sum.md5 dans chaque sous-répertoire de votre répertoire actuel.
J'ai nommé le fichier @ md5Sum.md5 pour qu'il soit répertorié en haut du répertoire dans un partage Samba.
La vérification de tous les fichiers @ md5Sum.md5 peut être effectuée à l'aide des 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 fichier checklog.txt en utilisant grep -v OK pour obtenir la liste de tous les fichiers qui diffèrent.
Pour régénérer un @ md5Sum.md5 dans un répertoire spécifique, lorsque vous modifiez ou ajoutez des fichiers, par exemple, supprimez le fichier @ md5Sum.md5 ou renommez-le et exécutez à nouveau la commande generate.
J'ai trouvé ce problème et, bien que les solutions ci-dessus soient élégantes, je voulais un hack rapide et sale pour cette situation: 1 répertoire, avec des sous-répertoires d'un niveau au plus profond.
Alors, entrez le répertoire dans un shell et exécutez:
md5sum * */* 2>/dev/null > md5sum.md5
Cela récupère tous les fichiers du répertoire de niveau supérieur, supprime l’avertissement concernant les sous-répertoires en cours, puis exécute md5sums sur le contenu du sous-répertoire. Avantage: facile à retenir, fait exactement ce que l'on est censé faire. Je suis toujours dérouté par la syntaxe de recherche et je ne peux jamais m'en souvenir, ce qui évite d'avoir à faire une boucle, etc. Pas une solution puissante et robuste, pas valable pour> 1 niveau de sous-répertoires, mais une solution rapide et facile au problème.