Bonjour a tous, j'aimerai scanner un certain de nombre de fichiers et mettre dans une table de hach chaque type de fichier et le nombre de chaque type

exemple:

J'ai un dossier qui contient 10 fichiers
j'ai besoin d'une table de hash qui me sorte:
jpg ---> 3
doc ---> 5
bat ---> 2

Voici le code

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
#!C:\perl\bin\perl.exe
 
use warnings; # ah les warning
use DB_File; # la base de donnees mon %hache
use strict; # pour les controles classiques
use File::Find; # pour le trt des fichiers (metadonnees)
use File::Copy; # pour copier les fichiers ancien_nom nouveau_nom
use Image::ExifTool ':Public'; # trouver sur Internet "http://www.sno.phy.queensu.ca/~phil/exiftool/" cf methode 'ImageInfo($fichier)';
use POSIX qw/strftime/; #pour récupérer la date
 
 
 
my (%hache2, $cle, $valeur);
 
# je veux pré alouer de la mémoire a mon %hache plus de 2 millions de paires 'cles/valeurs'
keys(%hache2) = 2097152;
 
# C'est le repertoire du programme le point de depart
my $dir = "C:\\mestraitements\\atach\\";
 
 
 
#1################################################################################################################################
#1##################### D?but comptage de repertoires ############################################################################
#1################################################################################################################################
 
# ouvre le repertoire $dir
opendir( DIR, $dir ) or die "Impossible d'ouvrir $dir: $!";
 
# récupère la liste des sous-répertoires de $dir dans @subdirs
my @subdirs = grep { -d } readdir(DIR);
 
#@subdirs2 est la liste des sous-répertoires de @subdirs contenant le mot pica
my @subdirs2 = grep($_ =~ /pica/, @subdirs);
 
 
    closedir(DIR);
 
#1################################################################################################################################
#1####################	Fin comptage de repertoires	##############################################################################
#1################################################################################################################################
 
 
 
#2# ATTENTION TRES IMPORTANT
#2# je detruit la mémoire.... A EVITER +++++
#2# ne pratiquer que si je veux faire un RESET.....COMPLET
#2################################################################################################################################
#2####################	Ligne de destruction de la base d'index	##################################################################
#2################################################################################################################################
#2#################### 	à n'activer que lors d'un reset complet 	##############################################################
#2################################################################################################################################
 
unlink "ma_base_de_type" ; #### /!\  attention, CF warning au dessus. /!\ ######################################################
 
#2################################################################################################################################
#2####################     Fin Ligne de destruction de la base d'index	##########################################################
#2################################################################################################################################
 
 
 
 
## Les ouvertures de connections
# la connection a la base persistante hache
tie %hache2, "DB_File", "ma_base_de_type", O_RDWR|O_CREAT, 0666, $DB_HASH or die "Cannot open file 'ma_base_d_index': $!\n";
# Le handle de fichier pour lister tous les documents des repertoires utilisés, la TRACE
#open (SORTIE, ">nom_des_documents_analyses.txt") || die 'le fichier erreurs.txt impossible ';
 
# zooooooooo l'oeil du cyclonnnnnnnnneeeeeeeee
# Ah la recursiviteeeeeeeeee ouaaahhhhhhhhh
 
find(\&traite_fichier, @subdirs2);
 
 
 
 
  while (($cle, $valeur) = each %hache2)
   { print "$cle -> $valeur\n" };
 
 
untie %hache2;
 
 
#4#################################################################################################################################
#4#################################################################################################################################
#4# Ma fonction MAGIQUE...non #####################################################################################################
#4#################################################################################################################################
 
sub traite_fichier
{
		my $type = "";
       # initialisation du nom de fichier je passe par la variable locale "$_"
        my $fichier = $_;
 
       # la trace des fichiers analyses, tous les fichiers de tous les repertoires oui tous...;
        #print SORTIE "$fichier\n";
 
       # j'étudie les meta données
        my $info = ImageInfo($fichier);
 
        my $type = $info->{FileType};
 
        if (exists($hache2{$type}))
		{
			$hache2{$type} = $hache2{$type}++;
		}
 
		else
		{
			$hache2{$type} = 1;
		}
}