Re: Éliminer des fichiers doublons
Yves de Brauer <[email protected]>
| Newsgroups | gmane.linux.mandrake.expert.french |
|---|---|
| Message-ID | <[email protected]> |
chartierc a écrit :
> 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...
>
Ah mais c'est vrai que j'avais vu fdupes dans mes recherches! Où ai-je
la tête?
A tester aussi donc.
Yves
message-footer.txt
(text/plain, 150 B)
================================= http://www.mandriva.com/linux/ Services & cert. hw on http://store.mandriva.com/ =================================