Perl compter des fichiers par répertoire
Résolu
deniss92
Messages postés
39
Date d'inscription
Statut
Membre
Dernière intervention
-
deniss92 Messages postés 39 Date d'inscription Statut Membre Dernière intervention -
deniss92 Messages postés 39 Date d'inscription Statut Membre Dernière intervention -
A voir également:
- Perl compter des fichiers par répertoire
- Renommer des fichiers en masse - Guide
- Fichiers epub - Guide
- Répertoire téléphonique gratuit - Télécharger - Bureautique
- Wetransfer gratuit fichiers lourd - Guide
- Explorateur de fichiers - Guide
5 réponses
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__
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
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__
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