Supprimer des doublons d'une liste en PERL

Fermé
NMalo Messages postés 83 Date d'inscription jeudi 9 juin 2011 Statut Membre Dernière intervention 26 juillet 2011 - 21 juin 2011 à 12:20
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 - 1 juil. 2011 à 12:12
Bonjour,

J'aimerais supprimer des fichiers doublons dans une recherche récursive de mes répertoires.

J'ai trouvé ceci, mais cela ne fonctionne pas.
Par défaut, je ne peux créer un fichier qui a le même nom dans le même dossier (Linux gentoo) mais le même fichier dans deux dossiers différents n'est pas "repéré" et supprimé.

La partie sensé me supprimer les doublons :
sub doublons_grep 
    {
        my ($ref_tabeau) = @_;

        my %hash_sans_doublon;

        return grep { !$hash_sans_doublon{$_}++ } @{$ref_tabeau};
    }


Le résultat :
/home/NMalo/Temp/Zoulou2
/home/NMalo/Temp/Pas_vide_3
/home/NMalo/Temp/Y
/home/NMalo/Temp/Pas_vide_2
/home/NMalo/Temp/Un
/home/NMalo/Temp/Zoulou1
/home/NMalo/Temp/X
/home/NMalo/Temp/Pas-vide_1
/home/NMalo/Temp/Deux
/home/NMalo/Temp/Pas_vide_4
/home/NMalo/Temp/Zoulou/Zoulou2
/home/NMalo/Temp/Zoulou/Zoulou1

Zoulou1 & Zoulou2 devraient être supprimés car ceux sont les mêmes (type, nom et contenu).

Merci de votre aide.


A voir également:

1 réponse

lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
Modifié par lami20j le 21/06/2011 à 14:43
Salut,

Zoulou1 & Zoulou2 devraient être supprimés car ceux sont les mêmes (type, nom et contenu).

Ben, non. J'ai mis les chaînes en gras.
Les fichiers ont peut être le même nom, mais le chemin est différent.
Si tu veux supprimer les fichiers doublon sans tenir compte de chemin alors il faudrait modifier ton code.


/home/NMalo/Temp/Zoulou2
/home/NMalo/Temp/Pas_vide_3
/home/NMalo/Temp/Y
/home/NMalo/Temp/Pas_vide_2
/home/NMalo/Temp/Un
/home/NMalo/Temp/Zoulou1
/home/NMalo/Temp/X
/home/NMalo/Temp/Pas-vide_1
/home/NMalo/Temp/Deux
/home/NMalo/Temp/Pas_vide_4
/home/NMalo/Temp/Zoulou/Zoulou2
/home/NMalo/Temp/Zoulou/Zoulou1



lami20j
0
NMalo Messages postés 83 Date d'inscription jeudi 9 juin 2011 Statut Membre Dernière intervention 26 juillet 2011 9
Modifié par NMalo le 21/06/2011 à 14:48
Bonjour, oui c'est exactement ce que je souhaite réaliser :s
Je comprend mieux pourquoi aucune façon ne fonctionne alors ><
Et je n'ai pas pu tester sur le même dossier car je ne peux pas crer un fichier doublon.

Donc oui c'est bien ce que je souhaite réaliser, que dois-je modifier s'il te plait? Merci.

Modifier la variable du tableau avec les chemins en lui indiquant de ne prendre que le fichier de chaque chemin? Si oui comment? merci.

PS : je souhaiterais éviter les modules (genre CPAN). Merci
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
Modifié par lami20j le 21/06/2011 à 14:50
Je suis au boulot et je n'ai pas le temps.
Je vais regarder ce soir et je vais te donner un exemple, d''accord?
0
NMalo Messages postés 83 Date d'inscription jeudi 9 juin 2011 Statut Membre Dernière intervention 26 juillet 2011 9
21 juin 2011 à 14:52
Parfait, merci d'avance, prend ton temps.
Désolé d'avoir répondu avec insistance :s
Bonne après-midi à toi.
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
21 juin 2011 à 20:11
Entre temps j'ai pensé à autre chose qui m'a échappée.
Les doublons selon le nom (sans le chemin) on pourrait facilement l'éliminer de la liste (sans module cpan en revanche on peut utiliser des modules standard si besoin).
La question est lequel?

Prenons le cas de Zoulou1 qui semble le même fichier par rapport au nom.

/home/NMalo/Temp/Zoulou1
/home/NMalo/Temp/Zoulou/Zoulou1

Lequel ont doit supprimer?
0
NMalo Messages postés 83 Date d'inscription jeudi 9 juin 2011 Statut Membre Dernière intervention 26 juillet 2011 9
22 juin 2011 à 16:30
J'y ai repensé également, finalement, je préfèrais détecter des fichiers identiques selon leurs contenus, (exemple, deux fichiers html "sommaire" parlant d'un fichier python et un autre ruby) j'ai vu rapidement qu'il faut se servir du Md5 Sum (Si je ne dis pas de bêtises).

Vérifier donc que les deux fichiers sont identiques et dans quel cas, supprimer le fichier le plus récent :s

Donc, dans le cas de :
/home/NMalo/Temp/Zoulou1
/home/NMalo/Temp/Zoulou/Zoulou1

Il faudrait en plus aller vérifier leur date de création et supprimer le dernier crée.

Si tu as trouvé une solution pour la vérification par nom, ça m'intéresse quand même pour l'appliquer sur des dossiers.
Au passage (je vais chercher ça mais si tu as la réponse je gagnerais du temps) existe t il une fonction File::Find::Name mais pour les Dossier? (rapidement recherché Directory::Find:Name mais rien trouvé). Merci
0