[PERL] sup des fichiers dans sous dossiers

Fermé
madmselle - 25 oct. 2011 à 14:09
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 - 28 oct. 2011 à 22:18
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 ?

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;
}



A voir également:

1 réponse

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 567
28 oct. 2011 à 22:18
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

0