web-dev-qa-db-fra.com

Comment puis-je lister récursivement Md5sum de tous les fichiers d'un répertoire et de ses sous-répertoires?

Je souhaite répertorier (et enregistrer) la somme de contrôle Md5 de tous les fichiers d'un répertoire et enregistrer cette liste dans un fichier texte appelé md5sum.txt

ce serait aussi bien si je pouvais

  • Intégrez-le à la commande tree (qui crée une arborescence de dossiers et de fichiers)
  • Faites-le fonctionner sur les dossiers et les sous-dossiers (c'est important)
8
Sumeet Deshmukh

Vous pouvez utiliser find (dans le répertoire)

find -type f -exec md5sum '{}' \; > md5sum.txt

Si vous souhaitez exclure le fichier md5sum.txt lui-même, vous pouvez le faire:

find -type f \( -not -name "md5sum.txt" \) -exec md5sum '{}' \; > md5sum.txt

Vous pouvez également utiliser une boucle: activer la lecture récursive

shopt -s globstar

Ensuite, dans le répertoire:

for i in **; do [[ -f "$i" ]] && md5sum "$i" >> md5sum.txt; done

Vous pouvez également exclure le fichier de celui-ci:

for i in **; do 
  [[ -f "$i" ]] && 
  [[ md5sum.txt != "$i" ]] && 
  md5sum "$i" >> md5sum.txt
done

Aucune de celles-ci ne produit une structure de type tree-. Mais ils affichent le chemin relatif du fichier à partir du répertoire de départ. Si vous voulez le chemin absolu, utilisez find /path/to/directory ...

Vous voudrez peut-être désactiver globstar après (shopt -u globstar)

20
Zanna

Vous pouvez exécuter la commande suivante:

md5sum /path/to/directory/* > /path_to_result/md5sum.txt

La sortie dans le fichier de résultat ressemblera à ceci:

46684e3891d990acde2e723ee3d4e94a  /var/log/alternatives.log
39cf1ebf93452ed5f8b240b35ae73f9f  /var/log/alternatives.log.1
aa6c09c411d1d0870bca5f401d589332  /var/log/alternatives.log.2.gz
1
Yaron