Perl supprimer les fichiers critere taille

Résolu
tematek Messages postés 5 Statut Membre -  
tematek Messages postés 5 Statut Membre -
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

6 réponses

  1. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    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
  2. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    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
  3. tematek Messages postés 5 Statut Membre
     
    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
  4. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    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
  7. tematek Messages postés 5 Statut Membre
     
    Merci beaucoup, lami, je te reparle sous peu, merci encore.
    0