Re: Éliminer des fichiers doublons

chartierc <[email protected]>
Newsgroups gmane.linux.mandrake.expert.french
Message-ID <[email protected]>
François-Xavier Pasquier a écrit :
> 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
>>     
sinon il y a le méconnu fdupes
fdupes -r répertoire

rapide et efficace, basé sur l'emprunte md5

urpmi fdupes devrait le faire...
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.