• [^] # Re: Intéressant

    Posté par (site web personnel) . En réponse à la dépêche Effacement des doublons et historique complet pour Fim 1.2.2. Évalué à 6. Dernière modification le 25 octobre 2016 à 19:58.

    La fonctionnalité de détection et effacement des duplicatas m’intéresse tout particulièrement

    En fait, il y a plein de softs qui font ça, à commencer par fslint (voir le code de findup, en gros c'est un gros pipe :) et fdupes et plein d'autres (N.B. j'utilise git ls-tree -r HEAD | cut -d' ' -f3- | sort | uniq -D -w 40 pour trouver les doublons dans un repo git). Le principe est un peu toujours le même :

    • parcourir le fs (tiens d'ailleurs j'ai découvert qu'il y avait une fonction appelée ftw() qui faisait ça dans la libc)
    • trier les fichiers par taille et ne retenir que les entrées présentes plus d'une fois
    • calculer un hash (éventuellement sur une portion du fichier pour aller plus vite si on accepte le risque de faux-positif)
    • les "doublons" sont les fichiers de même taille et de même hash (on peut aussi prendre en compte la similitude entre basenames, mais en ce qui me concerne j'évite ça compte tenu des soucis entre lower/uppercase sur les fs unix, et des troncature à 8 caractères sur les fs préhistoriques...). Certains programmes se contentent de lister les doublons mais d'autres proposent de remplacer les entrées excédentaires par un hard link si les fichiers sont sur le même fs.

    Par contre, je ne connais pas de programme qui te factorise les sous-arborescences (i.e. qui évitent de lister tous les fichiers et sous-dossiers quand tu as deux dossiers identiques). J'ignore si FIM le fait, mais en tout cas c'est ce manque que j'ai modestement essayé de combler avec un petit script sobrement intitulé Duplicide. Feedbacks welcome :)