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/ =================================