Logiciel effacant les fichiers doublon

Logiciel effacant les fichiers doublon - Logiciels - Linux et OS Alternatifs

Marsh Posté le 29-06-2005 à 00:55:53    

bonjours,
en fait je voulais savoir s'il existait un logiciel qui permet d'effacer les fichiers qui sont en double dans un répertoire !?
genre dans un disque dur ya deux fois les memes dossiers avec les memes images et il le detecte et il demande de les effacers !
ca existe ou pas ?

Reply

Marsh Posté le 29-06-2005 à 00:55:53   

Reply

Marsh Posté le 29-06-2005 à 01:05:49    

Tu arrives à avoir des dossiers avec plusieurs fichiers portant exactement le même nom ? Euh... Comment fais-tu ?!

Reply

Marsh Posté le 29-06-2005 à 01:08:52    

Je pense qu'il veut parler de fichiers identiques mais avec un nom différent :D  
 
Bref, un petit script bash avec md5sum + sort -n + cut/awk devrait faire l'affaire :o

Reply

Marsh Posté le 30-06-2005 à 12:04:43    

Pillow a écrit :

Je pense qu'il veut parler de fichiers identiques mais avec un nom différent :D  
 
Bref, un petit script bash avec md5sum + sort -n + cut/awk devrait faire l'affaire :o


 
oui c'est ca ou alors dans des dossiers différents !
 
md5sum + sort -n + cut/awk ---> KESAKO ????  :ouch:

Reply

Marsh Posté le 30-06-2005 à 12:12:44    

md5sum : calcul le hash md5 d'un fichier (c'est à dire le contenu du fichier est associé à une valeur. Si deux fichiers sont identiques, leurs hashs seront identiques.
ex: md5sum /etc/fstab -> "afa752dc62e45ca3d84c01b2550c009b  /etc/fstab"
 
sort -n : on regroupe la liste des fichiers par hash
donc la liste sera un groupage des noms des fichiers ayant un contenu identique.
cut et awk : traitement de cette liste
 
donc en gros voici le cheminement :
1- lister tous les fichiers (ex: find ./ -type f)
2- calculer leur hash (md5sum)
3- réagencer la liste dans le but d'avoir des groupes de fichiers ayant le même hash (sort -n)
4- script awk regardant si le fichier est un doublon, si oui le mettre dans une liste.
5- supprimer les fichiers contenus dans la liste (rm)


Message édité par jlighty le 30-06-2005 à 12:18:54
Reply

Marsh Posté le 30-06-2005 à 12:28:03    

Oui, c'est ça.
 
Bon, exemple à l'arrache, qui vaut ce qu'il vaut. À mettre dans un fichier (effacer_doublons.sh par exemple)

#! /bin/bash
 
if [ $# -gt 0 ]; then FILES="$1"; else FILES='*'; fi
 
md5sum $FILES | sort -n | while read l
do
  sum=$(echo $l | cut -d ' '  -f 1)
  if [ "X$sum" = "X$oldsum" ]
  then
      rm "$(echo "$l" | cut -c 35-)"
  fi
 
  oldsum="$sum"
done

Veuillez garder à l'esprit que ce script efface des fichiers sans rien demander, et que l'auteur (moi :o ) n'a pas dormi cette nuit, a plus de café que de sang dans les veines [:petrus75], a tapé ce post directement dans la fenêtre de réponse et n'a fait que quelques tests sommaires :o  :o S'il détruit votre disque dur ou tue votre chien, ce n'est pas ma faute :o  
 
Ceci étant dit, l'idée est là, il n'y a qu'à modifier selon les besoins. Pour utiliser:

$ chmod +x effacer_doublons
$ ./effacer_doublons            #efface tous les doublons dans le répertoire courant
$ ./effacer_doublons *.jpg      #efface tous les doublons dans le répertoire courant dont le nom se termine par .jpg

C'est à adapter (et à tester sur des dossiers dont vous avez une copie :o bis )


Message édité par Pillow le 30-06-2005 à 12:32:49
Reply

Marsh Posté le 30-06-2005 à 12:56:02    

je pense que 100top ne comprendra pas le déroulement du script donc je vais essayer de lui expliquer :
 

Code :
  1. 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 :
  1. 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 :
  1. do
  2.   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 :
  1. if [ "X$sum" = "X$oldsum" ]
  2.   then
  3.       rm "$(echo "$l" | cut -c 35-)"
  4.   fi
  5.   oldsum="$sum"
  6. 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

Code :
  1. "oldsum="$sum"

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed