|
|
|
|
Bonjour, je sus nul en Perl et il me faut en tout urgence un script qui prend en argument un nom de répertoire (chemin relatif ou absolu) et supprome recursivement tous les fichiers dont la taille est zéro. Et afficher à la fin les chemins absolus des fichiers supprimés et le nombre total de ces fichiers. Merci.
(je suis en examen)
Configuration: Windows XP Internet Explorer 7.0
Salut,
#!/usr/bin/perl
#
use warnings;use strict;
use File::Find;
my $rep = "/home/lami20j/trash/examen";
my (@fic_vide,@chemin_fic_supp,$nbfic_supp);
sub fic_vide{
push @fic_vide, $File::Find::name if -z
}
find (\&fic_vide,$rep);
$nbfic_supp = (@chemin_fic_supp = grep { unlink } @fic_vide);
print "$nbfic_supp fichiers ont été supprimés.\n";
print "Voici la liste de fichiers supprimés :\n";
print "$_\n" foreach @chemin_fic_supp;
Le résultat lami20j@debian:~/trash$ ls -R /home/lami20j/trash/examen/ /home/lami20j/trash/examen/: a fichier_non_vide rep1 rep2 /home/lami20j/trash/examen/rep1: a /home/lami20j/trash/examen/rep2: b lami20j@debian:~/trash$ perl supp_fic_taill0.pl 3 fichiers ont été supprimés. Voici la liste de fichiers supprimés : /home/lami20j/trash/examen/a /home/lami20j/trash/examen/rep1/a /home/lami20j/trash/examen/rep2/b lami20j@debian:~/trash$ ls -R /home/lami20j/trash/examen/ /home/lami20j/trash/examen/: fichier_non_vide rep1 rep2 /home/lami20j/trash/examen/rep1: /home/lami20j/trash/examen/rep2: lami20j@debian:~/trash$ cat examen/fichier_non_vide le seul fichier non vide lami20j@debian:~/trash$ lami20j |
T'es mon sauveuteur !!! je ne veux pas abuser, mais je coule mon examen et ma toute ma derniere session et tout mon année en consequence, j'ai encore deux quesion pour me sauver la vie, tu peux tu m'aider avec au moins un à ton choix:
|
Exercice 1
#!/usr/bin/perl
#
use warnings;use strict;
use File::Find;
use File::Basename;
my (%ext,$fic);
sub extension{
$fic = basename($File::Find::name);
if ($fic =~ /^\./){
# traitement de fichier cachés
# sachant que sous GNU/Linux les fichiers cachés
# commencent avec un point on risque de compter
# tous les fichiers cachés en tant qu'extension
$ext{$1}++ if $fic =~ /^\..+\.([a-z]+)$/i;
} else {
$ext{$1}++ if $fic =~ /.*\.([a-z]+)$/i;
}
}
find (\&extension,$ARGV[0]);
foreach (sort keys %ext){
printf "extension %7s => %7s fois\n",$_,$ext{$_};
}Résultatlami20j@debian:~/trash$ perl exo_tematek1.pl ../bin/my_perl_script/ extension bak => 1 fois extension bdf => 2 fois extension c => 3 fois extension conf => 1 fois extension css => 1 fois extension csv => 2 fois extension dat => 1 fois extension dot => 1 fois extension exo => 2 fois extension gz => 1 fois extension html => 8 fois extension orig => 4 fois extension pl => 138 fois extension pm => 3 fois extension sh => 1 fois extension src => 1 fois extension tmp => 2 fois extension txt => 12 fois extension xls => 1 foislami20j |
Re,
#!/usr/bin/perl
#
use warnings;use strict;
use File::Find;
use File::Basename;
my %perl_script;
sub fic_perl{
$perl_script{dirname($File::Find::name)}++ if -f
and grep { /\#!\s*\/usr\/bin\/perl/ } `cat $_`;
}
find (\&fic_perl,$ARGV[0]);
foreach (sort keys %perl_script){
print "$_ => $perl_script{$_}\n";
}
__END__
Le résultatlami20j@debian:~/trash$ perl exo_tematek2.pl /home/lami20j/bin/my_perl_script/ /home/lami20j/bin/my_perl_script => 114 /home/lami20j/bin/my_perl_script/Classe => 3 /home/lami20j/bin/my_perl_script/ccm_perl => 27 /home/lami20j/bin/my_perl_script/exo_daemon => 8 /home/lami20j/bin/my_perl_script/perl-en-action.src => 139 lami20j@debian:~/trash$ perl exo_tematek2.pl ../bin/my_perl_script/ ../bin/my_perl_script => 114 ../bin/my_perl_script/Classe => 3 ../bin/my_perl_script/ccm_perl => 27 ../bin/my_perl_script/exo_daemon => 8 ../bin/my_perl_script/perl-en-action.src => 139lami20j |