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 :

Suppression fichier suivant extension


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    66
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Avril 2007
    Messages : 66
    Par défaut Suppression et Copie de fichier suivant extension
    bonjour,

    j'ai un problème...

    j'arrive pas à faire un script qui supprime des fichiers suivant leurs extensions... les noms de fichier peuvent être différent...

    voilà, si quelqu'un à une idée ?


  2. #2
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 606
    Par défaut
    Bonjour,

    le mieux est que tu nous montre ton script, on te dira si ça cloche quelque part

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    66
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Avril 2007
    Messages : 66
    Par défaut
    Bin en fait j'ai fait ce script en batch et je voudrais le refaire en perl...

    SET line=C:\Test_batch\test\

    del %line%*.l*
    del %line%*.page
    del %line%*.BCS
    del %line%*.db
    del %line%*.dbb
    del %line%*.esav
    del %line%*.full
    del %line%*.osav
    del %line%*.PVTS
    del %line%*.r*
    del %line%*.s*
    ça c'est la première partie de mon problème...

    j'arrive pas à "traduire" ça en perl...

    la 2ème partie de mon problème c'est que j'aimerai que ce script supprime les fichier dans tout les sous-dossier du dossier de travail...

    je ne vois pas comment (ni en batch ni en perl) je peux lui dire : "fais ça dans tout les sous-dossier"...

    Voili

  4. #4
    Membre éprouvé Avatar de minus
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    153
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 153
    Par défaut
    T'as pensé à une fonction recursive?

    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
     
    sub ParseDirectory {
        my $directory = shift if (-d $_[0]) or return 0;
        $directory = $directory."/" if ( $directory !~ /\/$/ ) ;
        opendir DIR, $directory or print "Impossible d'ourvrir le dossier $FILE\n", return 0;
     
    	my @a_file = readdir DIR or return 0;
    	@a_file = sort (@a_file);
    	for (my $i=0; $i<scalar(@a_file); $i++){
    	    my $tmp = $directory.$a_file[$i];
    	    if ($tmp !~ /[\.~]$/) {
    	        if (-f $tmp) {
    	            &_ParseClasses($tmp); 
    	        }
    	        elsif (-d $tmp) {
    	            &ParseDirectory($tmp);
    	        }
    	    }
    	}
    	close DIR;
    	return 1;
    }
    Bon je te mache un peu le travail mais ca marche comme ca : la fonction debute son analyse sur un repertoire passé en argument
    - si c'est un fichier elle execute une commande (ici _ParseClasses())
    - si c'est un repertoire, la fonction se rappele elle meme.


    PS: c'est une fonction d'un de mes programmes, donc ca va pas marcher directement pour le tient, c'est juste un exemple de fonction recursive ... surrement assez mal écrite mais bon, c'est le principe qui est important

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    66
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Avril 2007
    Messages : 66
    Par défaut
    ok, je vois ce que tu veux dire...

    c'est une boucle, en fait??

    Début du script
    si c'est un fichier --> on supprime
    si c'est un dossier ---> on relance le script

    et ça s'arrête quand ??



    je vais essayer de décortiquer ton script et d'en garder le principal...

    Merci beaucoup pour ton aide !!!

  6. #6
    Membre éprouvé Avatar de minus
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    153
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 153
    Par défaut
    Ca s'arrete tout seul quand ca a parcouru l'ensemble de ton arborescence

  7. #7
    Expert confirmé
    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
    Par défaut
    Citation Envoyé par petibonohm
    c'est une boucle, en fait??
    Ce n'est pas une boucle, la récursion est différente de l'itération !!

    Sinon une solution légèrement différente :
    Code Perl : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #!/usr/bin/perl
    use strict; use warnings;
    use File::Find;
    find( \&del_files_by_type, 'C:\Test_batch\test' );
     
    sub del_files_by_type {
      if( not -d $_ 
         and m/\.(?:l.*|page|BCS|dbb?|esav|full|osav|PVTS|r.*|s.*)$/ ){
        unlink( $_ );
      }
    }
    Ce code fait usage du module File::Find (distribué avec Perl en standard) pour parcourir l'ensemble des fichiers du répertoire spécifié et de ses sous-répertoires et leur appliquer à chacun la fonction del_files_by_type avec le nom du fichier courant dans $_.

    --
    Jedaï

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Récupérer un nom de fichier sans extension
    Par OxN dans le forum Général Java
    Réponses: 13
    Dernier message: 01/08/2011, 17h13
  2. Copier Coller tous fichiers suivant extension
    Par arno21600 dans le forum Général Java
    Réponses: 9
    Dernier message: 04/01/2011, 14h04
  3. Ouverture d'un fichier suivant début d'extension
    Par cchampion2fr dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 07/10/2008, 14h32
  4. Réponses: 3
    Dernier message: 31/03/2008, 14h59
  5. Lire fichier suivant son extension !!
    Par Shandler dans le forum Langage
    Réponses: 37
    Dernier message: 18/11/2005, 15h44

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