je pense que 100top ne comprendra pas le déroulement du script donc je vais essayer de lui expliquer :
Code :
- if [ $# -gt 0 ]; then FILES="$1"; else FILES='*'; fi
|
On regarde le nombre de paramètres envoyés au script, si aucun paramètre n'est envoyé, par défaut on examine tous les fichiers du répertoire courant (*)
Code :
- md5sum $FILES | sort -n | while read l
|
on calcul le hash des fichiers puis on les regroupe par hash identique (sort -n) et on les analyse.
Code :
- do
- sum=$(echo $l | cut -d ' ' -f 1)
|
on récupère le hash qui est en fait le premier champ dans la chaine de caractère retourné par md5sum. Ex :
"afa752dc62e45ca3d84c01b2550c009b /etc/fstab" on récupère
"afa752dc62e45ca3d84c01b2550c009b"
Code :
- if [ "X$sum" = "X$oldsum" ]
- then
- rm "$(echo "$l" | cut -c 35-)"
- fi
- oldsum="$sum"
- done
|
Un peu d'algorithmique :
on compare la valeur du hash avec celle du hash précédent, si les deux valeurs sont identique ("X$sum"="X$oldsum" ) alors on supprime le fichier.
Le nom du fichier est récupère de la chaine de caractère : sachant que la taille de la valeur du hash fait 35 caractères, on récupère les caractères après le 35ème caractères -> on a ainsi le nom du fichier.
La valeur hash courant devient la valeur hash précédente