Re: Éliminer des fichiers doublons

"François-Xavier Pasquier" <[email protected]>
Newsgroups gmane.linux.mandrake.expert.french
Message-ID <[email protected]>
Pas de soucis :)

find  -> trouve tout ce qui existe à partir d'un point donné
(find ./plop pour modifier le point de départ)
	-type f -> on ne veut que des fichiers
	-print0 -> option pour séparer les fichiers par des \0 plutôt que des \n ce 
qui est bien pratique avec des fichiers qui ont des noms bizarres (utf8, 
caractères accentués, etc ...)

on envoie ça dans xargs. Son boulot à lui c'est de prendre ce qu'il y a en 
entrée standard (dans le pipe) et de l'envoyer dans la commande qui suit.
En gros je veux faire 'md5sum' sur chaque fichiers que find à trouvé.
	-0 -> option pour dire à xargs que les fichiers sont séparé par des \0 (le 
pendant de -print0 du find, s'bien pratique ca.)
	-i -> pour interactive, ca veut dire que je place l'argument ou je veux. 
l'argument c'est {}, c'est chaque fichier trouvé.

donc 
	xargs -0 -i md5sum {} 2>/dev/null -> on applique md5sum à chaque fichier.

après j'ai repris ce que tu avais trouvé, on trie
	sort
on élimine les fichiers redondants (qui ont le même checksum), 
	uniq -w 32 -> il vérifie que sur les premiers 32 caractères ce qui veut dire 
que 2 fichiers qui n'ont pas le même nom mais le même contenu seront considérés 
comme redondant (on en garde qu'un.)

on envoie ca dans 'awk'. je vais pas décrire awk, il me faudrait une semaine, 
mais en gros, comme je connaissais pas 'cut', je l'ai utilisé ici pour 
récupérer le nom du fichier. 
$2 -> c'est le nom du fichier (2ième champ dans la ligne)
et le print me permet d'écrire la ligne suivante : 
    mv myfile ~/fichiers_uniques

Une fois que j'ai écris cette ligne, il faut l'exécuter !
On envoie tout dans 'sh'

CQFD.

find -type f -print0 | xargs -0 -i md5sum {} 2>/dev/null | sort | uniq -w 32 | 
awk '{ print "mv "$2" ~/fichiers_uniques" }' | sh

Et pour ta question, le nom du fichier n'est pas pris en compte dans l'analyse, 
uniquement le checksum, qui symbolise le contenu.

--
FX

> François-Xavier Pasquier a écrit :
> > Bonjour,
> > La même chose sur tout une arborescence:
> >
> > find -type f -print0 | xargs -0 -i md5sum {} 2>/dev/null | sort | uniq -w
> > 32 | awk '{ print "mv "$2" ~/fichiers_uniques" }' | sh
> >
> > Pas testé, mais ca devrait marcher...
> >
> > --
> > FX
> >
> >> Bonjour,
> >>
> >> Je recherche sous Mandriva un moyen d'éliminer tous les fichiers
> >> doublons éparpillés dans différents dossiers, PC et clés USB (faire un
> >> grand ménage quoi).
> >>
> >> En cherchant sur le web je n'ai pas trouvé de solution toutes faites.
> >> Cela dit j'ai trouvé une commande prometteuse (pas encore testée):
> >>
> >> for j in `(for i in *; do md5sum $i 2>/dev/null; done;) | sort | uniq -w
> >>   32 | cut -d '*' -f 2`; do mv $j ~/fichiers_uniques; done;
> >>
> >> Seulement cela ne marche que dans un répertoire donné.
> >>
> >> Comment faire avec plusieurs répertoires et des fichiers qui peuvent
> >> avoir le même nom mais pas forcément le même contenu?
> >>
> >> Merci par avance de vos suggestions.
> >>
> >> Yves
>
> Merci de me répondre.
>
> Mes connaissances sont un peu légères. J'ai du mal à comprendre!
>
> Peux-tu détailler?
>
> Yves
message-footer.txt (text/plain, 150 B)
=================================
http://www.mandriva.com/linux/

Services & cert. hw on http://store.mandriva.com/
=================================
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.