IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Perl Discussion :

supprimer fichiers non modifiés depuis X jours


Sujet :

Langage Perl

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Mai 2006
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 2
    Points : 1
    Points
    1
    Par défaut supprimer fichiers non modifiés depuis X jours
    Bonjour,

    je débute en perl et j'ai besoin de créer un script qui à l'aide d'un fichier texte de ce type :

    chemin,nb_de_jours

    ex:
    c:\a\b\c,5

    supprimerai les fichiers de c:\a\b\c qui n'aurait pas été modifiées depuis 5 jours...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    #!/usr/bin/perl
    use strict;
    use warnings;
    use File::Copy;
    use File::Spec;
    use File::stat;
     
     
     
    my $nomfichier='listFolder.txt00';
    my $var;
    my $var2;
    my $createdtime;
     
     
    ####### lecture des infos du fichier####
    ########################################
    print "\n\nFichier de reference : ",$nomfichier,"\n";
     
    open (FH,"<$nomfichier") or die print "Erreur ouverture fichier " . $nomfichier . "\n";
    while ($var=<FH>)
    {
    if ($var =~/^([a-zA-Z0-9\\\:]+),([0-9])/)
    	{
     
    	####### affiche les infos des dossiers traités et depuis quel date il va nettoyer ######
     
    	print "\n\nfiles in $1 created before this date will be delete : ";
    	print scalar localtime(time - ($2 * 86400)),"\n\n";
     
    		####### visite les repertoires ##############
    		$var2=$1;
    		$var2 =~ s/\\/\\\\/g; #double les \
     
    		while (<$var2\\*>)
    			{
    			($createdtime) = (stat($_))[9];
    			print "\n",$createdtime;
    			#if ($createdtime lt time)
    			#	{
    			#	print "\nok";
    			#	}
    			}
     
    	}
    }
    close FH;
    et en sorti j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    D:\Profiles\tr\Desktop\scripts>perl t.pl
     
     
    Fichier de reference : listFolder.txt
     
     
    files in D:\PROFILES\tr\Desktop\scripts\folder1 created before
     this date will be delete : Tue May 16 10:35:34 2006
     
     
    Use of uninitialized value in print at t.pl line 38, <FH> line 1.
     
    Use of uninitialized value in print at t.pl line 38, <FH> line 1.
     
     
    files in D:\PROFILES\tr\Desktop\scripts\folder3 created before
     this date will be delete : Fri May 12 10:35:34 2006
     
     
    Use of uninitialized value in print at t.pl line 38, <FH> line 2.
     
    Use of uninitialized value in print at t.pl line 38, <FH> line 2.
    et là je sèche...

    Merci

  2. #2
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Ton script est très peu lisible (évite tout particulière les variables nommées $var et $var2...) et assez fragile. Tu peux écrire ça plus proprement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
    #!/usr/bin/perl
    use strict;
    use warnings;
    use File::Spec;
     
    my $list_to_rm_file = 'listFolder.txt00';
     
    # Lecture des fichiers à supprimer à partir de
    # $list_to_rm_file
    print "\n\nFichier de référence : ",$list_to_rm_file,"\n";
     
    open my $list_to_rm_handle , '<', $list_to_rm_file 
        or die "Erreur ouverture fichier $list_to_rm_file\n";
     
    PATH_LOOP :
    while ( my $line = <$list_to_rm_handle> ) {
        if ( my ($path, $days_count) = ($line =~ m/^\s*(.+),\s*(\d+)\s*$/x) ) {
     
            # affiche les infos des dossiers traités et 
            # avant quel date les fichiers seront supprimés
            print "\n\nLes fichiers dans $path créés avant "
                        . localtime(time - ($days_count * 86400))
                        . "seront supprimés\n\n";
     
     
            if ( opendir my $path_handle, $path ) {     
     
                while ( my $file_name = readdir $path_handle ) {
                    my $path_file = File::Spec->catfile( $path, $file_name );
                    my $days_since_modification = -M $path_file;
     
                    print "$file_name : vieux de $days_since_modification jours. ";
                    if ($days_since_modification >= $days_count) {
                        print "Supprimé !";
                        unlink $path_file;
                    }
                    print "\n";
     
                }
            }
            else {
                warn "N'arrive pas à ouvrir $path, passe à la ligne suivante\n";
            }
        }
    }
    close $list_to_rm_handle;
    --
    Jedaï

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Mai 2006
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Merci,

    je sais bien que mon script n'était po très lisible, mais il a été fait "à l'arrache".. :s

    je test ton script demain!

    encore meci

Discussions similaires

  1. [MySQL-5.5] Récupérer les items créés ou non modifiés depuis X jours
    Par deuxk dans le forum Requêtes
    Réponses: 2
    Dernier message: 06/05/2014, 11h14
  2. rendre un fichier non modifiable/supprimable
    Par Ogryien dans le forum Développement Sharepoint
    Réponses: 3
    Dernier message: 11/03/2013, 12h25
  3. g++ fichiers non modifiés
    Par ZeRevo dans le forum Linux
    Réponses: 2
    Dernier message: 24/09/2012, 22h16
  4. Système de fichier non modifié
    Par BaBeuH dans le forum Subversion
    Réponses: 1
    Dernier message: 15/03/2012, 15h51
  5. Supprimer fichiers non actifs DW CS4
    Par dannau dans le forum Dreamweaver
    Réponses: 0
    Dernier message: 02/09/2009, 19h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo