[PERL] sup des fichiers dans sous dossiers
madmselle
-
lami20j Messages postés 21506 Date d'inscription Statut Modérateur, Contributeur sécurité Dernière intervention -
lami20j Messages postés 21506 Date d'inscription Statut Modérateur, Contributeur sécurité Dernière intervention -
Bonjour,
Je suis débutante en Perl ! Après beaucoup de recherche sur internet, j arrive a quelque chose mais qui malheureusement ne marche pas.
J'aimerai supprimer des fichiers dans des sous dossiers avec pour critère une date (>5 mois), par exemple:
Dossier Test -> Dossier Test-bis -> fichier1 (cree le 02/06/2011) \\ ce fichier doit etre supprime
fichier2 (cree le 24/10/2011)
Voici mon code ... je ne sais pas s'il marche car après avoir rentrer le chemin du dossier, j'ai 2 erreurs
- Use of uninitialized value $files in -M at test.pl line 21, <STDIN> line 1.
- Use of uninitialized value in numeric gt (>) at test.pl line 21, <STDIN> line 1.
Quelqu'un peut il m'aider ?
Je suis débutante en Perl ! Après beaucoup de recherche sur internet, j arrive a quelque chose mais qui malheureusement ne marche pas.
J'aimerai supprimer des fichiers dans des sous dossiers avec pour critère une date (>5 mois), par exemple:
Dossier Test -> Dossier Test-bis -> fichier1 (cree le 02/06/2011) \\ ce fichier doit etre supprime
fichier2 (cree le 24/10/2011)
Voici mon code ... je ne sais pas s'il marche car après avoir rentrer le chemin du dossier, j'ai 2 erreurs
- Use of uninitialized value $files in -M at test.pl line 21, <STDIN> line 1.
- Use of uninitialized value in numeric gt (>) at test.pl line 21, <STDIN> line 1.
Quelqu'un peut il m'aider ?
use strict;
use warnings;
use File::Find;
my $files;
my @repertoires = lister_repertoires_recursif('chemin dossier');
sub lister_repertoires_recursif
{
print "Veuillez entrer le chemin du dossier : ";
my $repertoire = <STDIN>;
chomp($repertoire);
opendir (REP, $repertoire) or die $_;
if( -d "$repertoire" ) # le repertoire existe
{
opendir (DIR, "$repertoire") || die("Impossible d'ouvrir $repertoire...");
while ( -M $files > 5 ) #-M date de la derniere modification en jours
{
{
unlink $files;
print "$repertoire supprime\n";
}
}
closedir (DIR);
}
else
{
mkdir ($repertoire) || die ("Erreur creation repertoire\n");
}
return @repertoires;
}
1 réponse
-
Salut,
Pas besoin de créer un sous-programme pour recherche récursive.
C'est pour ça qu'on utilise la fonction find du module File::Find
Un exemple qui trouve le fichier file2 qui est créer le mois du juin.
lami20j@debian-acer:~/dossier_test$ pwd /home/lami20j/dossier_test lami20j@debian-acer:~/dossier_test$ ls -lR . .: total 8 drwxr-xr-x 2 lami20j lami20j 4096 oct. 28 22:07 dossier_test_bis -rw-r--r-- 1 lami20j lami20j 165 oct. 28 22:15 fic_ancien_plus_du_5mois.pl ./dossier_test_bis: total 0 -rw-r--r-- 1 lami20j lami20j 0 oct. 24 00:00 file -rw-r--r-- 1 lami20j lami20j 0 juin 2 00:00 file2 lami20j@debian-acer:~/dossier_test$ cat fic_ancien_plus_du_5mois.pl #!/usr/bin/perl use strict;use warnings; use File::Find; my $rep = "/home/lami20j/dossier_test"; find sub{ print $File::Find::name,"\n" if -M > 5}, $rep; __END__ lami20j@debian-acer:~/dossier_test$ perl fic_ancien_plus_du_5mois.pl /home/lami20j/dossier_test/dossier_test_bis/file2