Perl supprimer les fichiers critere taille
Résolu
tematek
Messages postés
5
Date d'inscription
Statut
Membre
Dernière intervention
-
tematek Messages postés 5 Date d'inscription Statut Membre Dernière intervention -
tematek Messages postés 5 Date d'inscription Statut Membre Dernière intervention -
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)
(je suis en examen)
A voir également:
- Perl supprimer les fichiers critere taille
- Comment réduire la taille d'un fichier - Guide
- Supprimer rond bleu whatsapp - Guide
- Fichier impossible à supprimer - Guide
- Supprimer une page word - Guide
- Supprimer les fichiers temporaires - Guide
6 réponses
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
Salut,
Le script
Le résultat
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$
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 )
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 )
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.
veux-tu être plus explicite?
et aussi de me dire ce que tu veux afficher comme résultat.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Re,
Exercice 2
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