Projet unDupe :
Un script python qui crawle des répertoires, il enregistre dans 2 tables les données suivantes :
Main : le hash (md5, sha1 ...) en clé, le path, un flag VIP (si un duplicat a été sorti "à la main", il prend la place de l'autre, qui part en quarantaine, et acquière ce flag qui lui garanti de rester en place si un autre concurrent arrive ; ce flag est prioritaire sur toute autre règle).
Quarantaine : les duplicats sont stockés en quarantaine, cette fois-ci la clé est le path d'origine, le fichier est stocké sous son hash (champ 1), et ses attributs (owner, group, dates), un flag GHOST (si la mise en quarantaine est asynchrone, les entrées sont générées avec ce flag ; l'exécution de la détermination retire ces flags).
Règles de gestion :
- KISS : le moins de dépendances possibles ; 1 script et 1 fichier de config : si dispo, on utilise une lib de hashage, sinon on se débrouille avec ce qu'il y a de dispo sur l'OS (mais je te dis pas l'overhead en forkage...) ; si dispo, on utilise une sqlite, sinon on se débrouille avec du standard python (paramétrable, encore une fois, mais on vise la possibilité d'utiliser le script en standalone ; si le besoin se fait ressentir et que ça ne complexifie pas, pourquoi pas imaginer des adapter sql ou autre db...)
- le script a une interface cli capable de gérer aisément toutes les actions et un mode verbose permet de logger toutes les actions si nécessaire (lvl 1: les actions, lvl 2: horodatage)
- en mode crawler si le script tombe sur un fichier déjà connu, il inspecte les règles de priorités :
-> Si le fichier enregistré est VIP, le nouveau part direct en quarantaine
-> Si le fichier enregistré est dans un répertoire prioritaire le nouveau part en quarantaine (et vice versa)
-> Si des règles de priorité en fonction des attributs sont définies, elles sont utilisées
-> Si les deux fichiers sont égaux, le nouveau part en quarantaine
- une commande permet d'afficher les 2 fichiers côte à côte pour choisir celui à conserver. Ce choix peut-être fait : (ces modes sont adossées aux règles de priorité, avec une valeur par défaut générale)
- en background, dès le passage du crawler
- inline
- Post-crawling
- une option de lazy crawling n'analyse que les fichiers plus récents que la dernière éxecution
- lors de la restauration, le déterminateur demande si le flag VIP doit être donné au fichier restauré (ce comportement peut-être paramétré par défaut - y or n), il peut tenter de restaurer (ou pas, paramétrable) les attributs
- un mode list permet d'afficher tous les duplicatas et de switcher les fichiers et de flager/déflager les VIP (des options permettent de gérer quels champs sont affichés et de filtrer les entrées), une commande permet de supprimer définitivement les dupes (paramétrable)