Avoir plusieurs chemins, comme :
1: /abc/def/some/common/part/xyz/file1.ext
2: /other/path/to/7433/qwe/some/common/part/anotherfile.ext
3: /misc/path/7433/qwe/some/common/part/filexx.ext
4: /2443/totally/different/path/file9988.ext
5: /abc/another/same/path/to/ppp/thisfile.ext
6: /deep1/deep2/another/same/path/to/diffone/filename.ext
J'ai besoin de trouver les parties communes - toutes celles qui sont possibles, par exemple dans l'exemple ci-dessus, si possible pour trouver les parties communes :
/some/common/part/ - in the paths 1,2,3
/another/same/path/to/ - in the 5,6
/path/to/ - in the 2,5,6
/path/ - 2,3,4,5,6
etc.
Je n'ai absolument aucune idée de la manière de résoudre ce problème - quelle est la bonne approche ?
- basé sur des chaînes - quelque peu trouver les parties communes d'une corde
- basé sur les listes - diviser tous les chemins en listes et quelque peu comparer des tableaux pour trouver des éléments communs
- arbre-graphe - quelque peu trouver les parties communes d'un graphique
- autre ?
Lorsque je recevrai des instructions sur la façon de résoudre ce problème, je pourrai (probablement) le coder moi-même - ne veulent donc pas service de programmation gratuit - mais j'ai besoin de conseils pour commencer.
Je suis sûr qu'il existe déjà un module CPAN qui pourrait m'aider, mais je n'ai vraiment aucune idée de la façon de trouver le bon module utile parmi la liste de 30 000 modules pour le problème ci-dessus :(.
EDIT - Pour ce dont j'ai besoin, ceci :
J'ai environ 200 000 fichiers, répartis dans 10 000 répertoires, et beaucoup d'entre eux sont liés entre eux, par exemple :
/u/some/path/project1/subprojct/file1
/u/backup/of/work/date/project1/subproject/file2
/u/backup_of_backup/of/work/date/project1/subproject/file2
/u/new/addtions/to/projec1/subproject/file3
Les fichiers sont de types différents (pdf, images, doc, txt et ainsi de suite), plusieurs sont identiques (comme ci-dessus file2 - facile à filtrer avec Digest::MD5), mais la seule façon de les "regrouper" est de se baser sur les "parties communes" d'un chemin - par exemple "project1/subproject" et ainsi de suite
D'autres fichiers ont le même MD5, ce qui permet de filtrer les doublons, mais ils se trouvent dans des arbres différents, par exemple
/u/path/some/file
/u/path/lastest_project/menu/file
/u/path/jquery/menu/file
/u/path/example/solution/jquery/menu/file
donc, les fichiers sont les mêmes, (md5 identiques) mais il faut quelque peu déplacer une copie vers le bon endroit (et en supprimer d'autres) et il faut en quelque sorte déterminer les chemins communs "les plus utilisés", et collecter les tags... (les anciens éléments de chemins sont des tags)
L'idée derrière est :
- si les mêmes fichiers md5 sont principalement stocké sous un certain voie commune - Je peux prendre une décision où déplacer une copie ...
Et c'est plus compliqué, mais pour l'explication, il suffit de ce qui précède ;)
J'ai simplement besoin de réduire l'entropie sur mon disque dur ;)