Perl compter des fichiers par répertoire
Résolu/Fermé
deniss92
Messages postés
39
Date d'inscription
vendredi 3 août 2007
Statut
Membre
Dernière intervention
15 septembre 2013
-
7 déc. 2008 à 11:08
deniss92 Messages postés 39 Date d'inscription vendredi 3 août 2007 Statut Membre Dernière intervention 15 septembre 2013 - 26 déc. 2008 à 10:38
deniss92 Messages postés 39 Date d'inscription vendredi 3 août 2007 Statut Membre Dernière intervention 15 septembre 2013 - 26 déc. 2008 à 10:38
A voir également:
- Perl compter des fichiers par répertoire
- Wetransfer gratuit fichiers lourd - Guide
- Renommer des fichiers en masse - Guide
- Explorateur de fichiers - Guide
- Répertoire téléphonique gratuit - Télécharger - Bureautique
- Fichiers epub - Guide
5 réponses
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 569
25 déc. 2008 à 13:17
25 déc. 2008 à 13:17
Re,
Voici une autre version qui t'afficheras le total par répertoire ainsi que le total de la racine de recherche
Voici une autre version qui t'afficheras le total par répertoire ainsi que le total de la racine de recherche
#!/usr/bin/perl use strict;use warnings; use File::Find; my ($n,$total,$rep,$racine); $racine = "/home/lami20j/"; opendir(REP,$racine); sub recherche { ++$n if $File::Find::name =~ /\.pl/; } while(defined($rep=readdir REP)){ if (-d "${racine}$rep" and $rep !~ /^\..?$/){ find(\&recherche,"${racine}$rep"); print "${racine}$rep : $n\n" if $n!=0; $total += $n; $n=0; } } print "$racine : $total\n"; __END__
deniss92
Messages postés
39
Date d'inscription
vendredi 3 août 2007
Statut
Membre
Dernière intervention
15 septembre 2013
1
25 déc. 2008 à 11:49
25 déc. 2008 à 11:49
Re
Voici la version allégée de mon script de départ. Je l'ai décompsé en deux fonctions. Je n'ai pas pu faire la même chose en utilisant "file find", car il affiche les sous répertoires où se trouvent les fichiers dans l'aborescence, alors que le but est de compter les fichiers de type "*.jpg" et *.pdf" et d'afficher le nombre total par répertoire principal. C'est surement possible avec "file find", mais je n'ai pas pu trouver comment masquer les sous-répertoires.
#!/usr/bin/perl
use CGI qw(:standard :html3);
$cgi = new CGI;
($sec, $min, $heure, $jour, $mois,$annee, undef, undef, undef) = localtime();
$mois += 1 and $annee += 1900;
$date=$jour.'-'.$mois.'-'.$annee;
$racine = "/data/docs/"; # répertoire racine ...
@rep=qw(archives photos divers);# listes des répertoires à afficher
%hash;
sub jpg {
for (my $i=0;$i<=$#rep;$i++) {
my $chemin=$racine.$rep[$i];
my $nombre_jpg=(`ls -R $chemin|grep -i jpg|wc -l`);
my $rep_jpg=$rep[$i]."(jpg)";
push @{$hash{$rep_jpg}}, $nombre_jpg;
}
}
sub pdf {
for (my $i=0;$i<=$#rep;$i++) {
my $chemin=$racine.$rep[$i];
my $nombre_pdf=(`ls -R $chemin|grep -i pdf|wc -l`);
my $rep_pdf=$rep[$i]."(pdf)";
push @{$hash{$rep_pdf}}, $nombre_pdf;
}
}
jpg();
pdf();
push @tab,\%hash;
$\="\n";
#affichage en CGI
print
$cgi->header() .
$cgi->start_html (
-title=>'Nombre de documents',
-author=>'xxxx',
-meta=>{'keywords'=>'CGI Perl'},
-BGCOLOR=>'white',
-LINK=>'red',
-charset=>'UTF-8',
).
$cgi->h1('Nombre de documents - '.$date) . "\n";
#print '<TABLE border="1" cellspacing="2" cellpadding="2">' . "\n";
print $cgi->table({border=>1,width=>'20%'}) . "\n";
print $cgi->Tr(th[qw(Documents Nombres)]);
foreach (@tab){
foreach my $k(sort keys %{$_}){
print $cgi-> Tr(td($k),td({align=>"right"},$_->{$k})),"\n";
}
}
print "</TABLE>";
$cgi->end_html ;
exit (0);
------------------------------------------------------------------------------------------------------FIN DU SCRIPT
A bientot
Deniss92
Voici la version allégée de mon script de départ. Je l'ai décompsé en deux fonctions. Je n'ai pas pu faire la même chose en utilisant "file find", car il affiche les sous répertoires où se trouvent les fichiers dans l'aborescence, alors que le but est de compter les fichiers de type "*.jpg" et *.pdf" et d'afficher le nombre total par répertoire principal. C'est surement possible avec "file find", mais je n'ai pas pu trouver comment masquer les sous-répertoires.
#!/usr/bin/perl
use CGI qw(:standard :html3);
$cgi = new CGI;
($sec, $min, $heure, $jour, $mois,$annee, undef, undef, undef) = localtime();
$mois += 1 and $annee += 1900;
$date=$jour.'-'.$mois.'-'.$annee;
$racine = "/data/docs/"; # répertoire racine ...
@rep=qw(archives photos divers);# listes des répertoires à afficher
%hash;
sub jpg {
for (my $i=0;$i<=$#rep;$i++) {
my $chemin=$racine.$rep[$i];
my $nombre_jpg=(`ls -R $chemin|grep -i jpg|wc -l`);
my $rep_jpg=$rep[$i]."(jpg)";
push @{$hash{$rep_jpg}}, $nombre_jpg;
}
}
sub pdf {
for (my $i=0;$i<=$#rep;$i++) {
my $chemin=$racine.$rep[$i];
my $nombre_pdf=(`ls -R $chemin|grep -i pdf|wc -l`);
my $rep_pdf=$rep[$i]."(pdf)";
push @{$hash{$rep_pdf}}, $nombre_pdf;
}
}
jpg();
pdf();
push @tab,\%hash;
$\="\n";
#affichage en CGI
$cgi->header() .
$cgi->start_html (
-title=>'Nombre de documents',
-author=>'xxxx',
-meta=>{'keywords'=>'CGI Perl'},
-BGCOLOR=>'white',
-LINK=>'red',
-charset=>'UTF-8',
).
$cgi->h1('Nombre de documents - '.$date) . "\n";
#print '<TABLE border="1" cellspacing="2" cellpadding="2">' . "\n";
print $cgi->table({border=>1,width=>'20%'}) . "\n";
print $cgi->Tr(th[qw(Documents Nombres)]);
foreach (@tab){
foreach my $k(sort keys %{$_}){
print $cgi-> Tr(td($k),td({align=>"right"},$_->{$k})),"\n";
}
}
print "</TABLE>";
$cgi->end_html ;
exit (0);
------------------------------------------------------------------------------------------------------FIN DU SCRIPT
A bientot
Deniss92
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 569
25 déc. 2008 à 12:19
25 déc. 2008 à 12:19
Salut,
Compliqué ton script ;-)
Par exemple pour compter le nombre de fichiers .jpg d'un répertoire (attention, la recherche sera récursive = il va chercher aussi dans les sous-répertoires, etc.)
Compliqué ton script ;-)
Par exemple pour compter le nombre de fichiers .jpg d'un répertoire (attention, la recherche sera récursive = il va chercher aussi dans les sous-répertoires, etc.)
#!/usr/bin/perl use strict;use warnings; use File::Find; my $n; sub recherche { if (-f){++$n if $File::Find::name =~ /\.jpg/;} } find(\&recherche,"/chemin/vers/repertoire"); print "$n\n"; __END__
deniss92
Messages postés
39
Date d'inscription
vendredi 3 août 2007
Statut
Membre
Dernière intervention
15 septembre 2013
1
25 déc. 2008 à 13:01
25 déc. 2008 à 13:01
Bonjour Lami20j
Si tu veux afficher les répertoires , il va aussi t'afficher les sous répertoires sans agréger le total par répertoire, je crois. Je vais tester pour voir.
A bientôt
Deniss92
Si tu veux afficher les répertoires , il va aussi t'afficher les sous répertoires sans agréger le total par répertoire, je crois. Je vais tester pour voir.
A bientôt
Deniss92
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
deniss92
Messages postés
39
Date d'inscription
vendredi 3 août 2007
Statut
Membre
Dernière intervention
15 septembre 2013
1
26 déc. 2008 à 10:38
26 déc. 2008 à 10:38
Re,
La dernière version est mieux.
Merci et à bientôt.
Deniss92
La dernière version est mieux.
Merci et à bientôt.
Deniss92