#!/usr/bin/perlusev5;usestrict;####################### User configuration #######################my$temporary_file="/tmp/list_findduplicate_md5";# can be any of the control sum programs from coreutils:# cksum, sha1sum, sha224sum, sha256sum, sha384sum, sha512sum, md5sum# could be sha3 as well the day GNU decides to add it to coreutils.my$hash_program="md5sum";#my $hash_program = "/usr/local/bin/messageid.sh" ;# program must display the name of the file after its sum.# When using cksum only the crc32 sum is used, not the byte count.######### Main #########sub help{my$help_string="Syntax : ./findduplicate.plWill list files in current directories and subdirectories,and display the location of the files which are duplicates,based on their hash calculated by ${hash_program}.Author: XXXXXXXXXXXX, <xxxxxxxxxxxx\@xxxxxxx>Date: 19 May 2013";print$help_string;exit(0);}help()unless($#ARGV==-1);my($line);my(@params);my($formersum,$currentsum);my($formername,$currentname);my($count)=0;my($s1,$s2);# Fichier contenant les sommes de contrôle de tous# les fichiers du répertoires et des sous-répertoires,# classées par ordre alphabétique de la somme de contrôlesystem("find . -type f -exec ${hash_program} \"{}\" \";\" | sort > ${temporary_file}");openINPUT,"<",$temporary_file;$formersum="";while($line=<INPUT>){# Dans cette boucle on lit une somme de contrôle# depuis le fichier, et on compare à la précédente.# C'est ce qui définit un fichier dupliqué.chomp$line;@params=split/ /,$line;$currentsum=$params[0];$currentname=$params[$#params];#print "##${formersum} -- ${currentsum}**\n" ;if("${formersum}"eq"${currentsum}"){$s1=-s${formername};$s2=-s${currentname};# Dans le cas où on utilise messageID.sh, on peut# avoir des fichiers dupliqués de taille différente.# Par convention on écrit le plus petit en premier.# Dans les autres cas (md5, crc32), les fichiers# détectés comme dupliqués ont nécessairement la# même taille, la première comparaison étant alors# toujours vraie.#if($s1<=$s2){print"diff -u ${formername} ${currentname}\n";}else{print"diff -u ${currentname} ${formername}\n";}#print "mv ${formername} dup/\n" ;$count=$count+1;}$formersum=$currentsum;$formername=$currentname;}if($count==0){print"No duplicates found\n";}#elsif ($count == 1) {# print "One duplicate found\n" ;#} else {# print "$count duplicates found\n" ;#}# On the target system, asks for enter# Useful on a specific machine where the script# is run from a graphical menu and must wait for# user to read the results before existing.##print "Press Enter to exit\n" ;#<> ;__END__```
# revoilà ton script perdu, sous la même licence que Perl (GPLv1+|Artistic licence)
Posté par JGO . En réponse au journal Retour à l'interface Console. Évalué à 4.