Perl supprimer les fichiers critere taille

Résolu/Fermé
tematek Messages postés 5 Date d'inscription mercredi 31 janvier 2007 Statut Membre Dernière intervention 5 mars 2007 - 31 janv. 2007 à 19:46
tematek Messages postés 5 Date d'inscription mercredi 31 janvier 2007 Statut Membre Dernière intervention 5 mars 2007 - 1 févr. 2007 à 05:21
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)

6 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
31 janv. 2007 à 22:25
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ésultat
lami20j@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 fois
2
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
31 janv. 2007 à 21:10
Salut,
Le script
#!/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$

1
tematek Messages postés 5 Date d'inscription mercredi 31 janvier 2007 Statut Membre Dernière intervention 5 mars 2007
31 janv. 2007 à 21:32
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:

1.

un script qui prends un nom de répertoire (chemin relatif ou absolu) et construit un hachage qui contient les extensions comme clés et le nombre de fichiers ayant cette extension comme valeurs. Toute l'arboresce de ce répertoire doit être parcorue. Afficher
le hachage ainsi construit.

*Remarque: si on a un fichier qui se nomme toto.pl.xls.doc, son extension c'est .doc
et non pas xls ni pl.

2.
un script qui prend un nom de chaque repertoire (chemin relatif ou absolu) et affiche une seule fois le nom de chaque répertoire qui contient au moins un fichier Perl. Toute l'arborescence de ce répertoire qui contient au moins un fichier Perl. Toute l'arborescence de ce répertoire doit être parcourue. On suppose que le fichier qui contient la ligne #!/usr/bin/perl est un fichier Perl. (La construction d'un hachage peut vous aider
pour cet exercice)

prends un le plus facile a ton choix

(j'ai une grande dette envers 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 569
31 janv. 2007 à 22:44
Je ne comprends pas très bien le 2ème exo

veux-tu être plus explicite?
et aussi de me dire ce que tu veux afficher comme résultat.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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
31 janv. 2007 à 23:48
Re,

Exercice 2
#!/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ésultat
lami20j@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 => 139
0
tematek Messages postés 5 Date d'inscription mercredi 31 janvier 2007 Statut Membre Dernière intervention 5 mars 2007
1 févr. 2007 à 05:21
Merci beaucoup, lami, je te reparle sous peu, merci encore.
0