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 :

Déplacer un répertoire et son contenu


Sujet :

Langage Perl

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 44
    Points : 32
    Points
    32
    Par défaut Déplacer un répertoire et son contenu
    Bonjour,

    Après quelques recherches, notamment sur le module File::Copy, sur la FAQ perl, et dans la litterature, j'ai bien l'impresssion qu'il n'existe aucune fonction en perl qui permette de déplacer un répertoire et son contenu... Est-ce vraiment le cas? Doit-je la coder tout seul?

    De plus dans un soucis de bien intercepter les erreurs, j'aimerais éviter autant que possible une commande unix du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    system("mv $rep_origine $rep_destinataire")
    Et enfin, j'aimerais également éviter de devoir copier puis effacer le répertoire, car j'ai une obligation de performance...

    Que me conseillez vous ? Merci !

  2. #2
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 860
    Points : 4 820
    Points
    4 820
    Par défaut
    Bonjour

    Une solution : et @++

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 44
    Points : 32
    Points
    32
    Par défaut
    Autant pour moi, je vous ai dit n'importe quoi

    Après relecture de mon code écrit il y a très longtemps (hier en fait ), je m'apercois que ce n'est pas le renommage du répertoire que je n'arrivais pas à faire, mais sa copie récursive.
    Je reprend donc ma question : comment faut-il faire pour copier un répertoire et son contenu ?

    Merci et désolé ...

  4. #4
    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
    Attention, rename() ne fonctionne pas au travers des frontières de filesystems. Il est donc nécessaire de tester ceci et sinon de se rabattre sur une solution par copie (File::Copy::move fait ça, il suffit donc d'implémenter une récursion sur l'ensemble du répertoire pour avoir ta fonction).

    Pour voir comment traiter récursivement l'ensemble du répertoire, regarde dans la FAQ et éventuellement les snippets).

    --
    Jedaï

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 44
    Points : 32
    Points
    32
    Par défaut
    Bonjour ,

    Concernant rename, je suis sur de rester sur une machine unix, donc je ne pense pas que ce la ne pose de problèmes.
    Concernant la copie, voici une mon adaptation de la fonction récursive de la FAQ pour ceux que ça pourrait interesser :
    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
    sub Copier_Repertoire  {
        my ( $dir_source, $dir_dest ) = @_;
     
        # On teste l'existance des répertoires
        die "Le répertoire source $dir_source n'existe pas\n"   if ( ! -e $dir_source );
        die "Le répertoire destination $dir_dest existe déja\n" if ( -e $dir_dest );
     
        # On crée le répertoire destination
        mkdir ( $dir_dest, 0777 ) or die "Impossible de créer le répertoire $dir_dest : $!\n";
     
        # On ouvre le répertoire source
        opendir( DIR, $dir_source ) || die "Impossible d'ouvrir le répertoire $dir_source : $!\n";
     
        # On récupére la liste des éléments qu'il contient
        my @elmts = grep !/(?:^\.$)|(?:^\.\.$)/, readdir DIR;
        closedir DIR;
     
        # On copie 
        foreach ( @elmts ) {
            if ( -d "$dir_source/$_" ) {
                Copier_Repertoire( "$dir_source/$_", "$dir_dest/$_" );
            }
            else {
                copy ( "$dir_source/$_", "$dir_dest/$_" )
                  || die "Impossible de créer le fichier $dir_dest/$_ : $!\n";
            }
        }
    }
    Merci beaucoupe !

  6. #6
    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
    Citation Envoyé par choubiroute
    Bonjour ,

    Concernant rename, je suis sur de rester sur une machine unix, donc je ne pense pas que ce la ne pose de problèmes.
    Tu ne comprends pas : dire que rename() ne marche pas à travers les frontières de filesystems signifie en gros que tu ne peux pas "renamer" d'une partition à l'autre... Le fait que tu sois sous Unix n'a pas grand chose à voir avec ça !

    --
    Jedaï

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 44
    Points : 32
    Points
    32
    Par défaut
    Ok, merci pour l'explication ! Mais ce n'est pas mon cas non plus!

    @++

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

Discussions similaires

  1. Réponses: 30
    Dernier message: 08/12/2008, 11h57
  2. Réponses: 2
    Dernier message: 08/09/2007, 18h09
  3. Réponses: 9
    Dernier message: 24/10/2005, 18h42
  4. Comment copier un répertoire et son contenu ?
    Par yoghisan dans le forum API, COM et SDKs
    Réponses: 6
    Dernier message: 20/06/2004, 17h40

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