Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 10 sur 10
  1. #1
    Invité régulier
    Inscrit en
    décembre 2011
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : décembre 2011
    Messages : 40
    Points : 7
    Points
    7

    Par défaut Rajouter chaque fichier dans une tableau

    Bonjour,

    J'apprends Perl petit à petit. Mais je suis confronté à un problème.
    Je souhaites lister les virtual host de ma config Apache et mettre chaque fichier dans un tableau.

    Donc un algo de ce genre:
    Lister fichiers
    Pour chaque fichier
    mettre fichier dans une case d'un tableau
    fin Pour.

    J'ai vu plein d'exemple pour lister des fichiers. J'ai regarder sur la FAQ, mais j'ai rien trouvé de bien. Car je voudrais surtout comprendre le code.

    Merci à vous

  2. #2
    Invité régulier
    Inscrit en
    décembre 2011
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : décembre 2011
    Messages : 40
    Points : 7
    Points
    7

    Par défaut

    Une idée ?

  3. #3
    Membre éclairé Avatar de Mandraxx
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    mai 2011
    Messages
    171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Gers (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2011
    Messages : 171
    Points : 338
    Points
    338

    Par défaut

    Bonjour,

    Pas besoin, Perl fait ça tout seul comme un grand :
    Code :
    1
    2
    3
    4
    #!/usr/bin/perl
    opendir(DIR,"/var") or die "Echec de lecture de /var";
    @files = readdir(DIR);
    closedir(DIR);
    Tu peux rajouter ça pour vérifier le contenu de ton tableau :
    Code :
    1
    2
    3
    foreach $file (@files) {
            print "J'ai trouvé $file dans /var\n";
    }
    @+
    Le choix motivé par le seul argument de modernité est intrinsèquement dépourvu de créativité.

  4. #4
    Invité régulier
    Inscrit en
    décembre 2011
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : décembre 2011
    Messages : 40
    Points : 7
    Points
    7

    Par défaut

    Super c'est ce que je cherchais.
    Mais lorsque j'essaye de le mettre dans un dossier compresser:

    Code :
    $saveTar -> add_files(@tabFichiersVH);
    Il me dit que les fichiers ne sont pas trouvés :/

    Code :
    1
    2
     
    No such file: 'default-ssl' at Sauvegarde.pl line 65

  5. #5
    Membre éclairé Avatar de Mandraxx
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    mai 2011
    Messages
    171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Gers (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2011
    Messages : 171
    Points : 338
    Points
    338

    Par défaut

    Si tu exécutes le code de vérification, tu remarqueras que le contenu du tableau contient le chemin relatif des fichiers par rapport au répertoire fourni à opendir.

    Il te faut donc transformer ces chemins en chemins absolus.

    Perso, pour mon exemple, je ferais comme ça :
    Code :
    1
    2
    3
    for ($i=0;$i<$#files;$i++) {
            $files[$i]="/var/".$files[$i];
    }
    Mais bon, y'a peut être plus élégant .... (Je me débrouille mais je ne suis pas ce qu'on appelle un mongeur ;-)

    @+
    Le choix motivé par le seul argument de modernité est intrinsèquement dépourvu de créativité.

  6. #6
    Invité régulier
    Inscrit en
    décembre 2011
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : décembre 2011
    Messages : 40
    Points : 7
    Points
    7

    Par défaut

    Ahh super c'est exactement ça.
    Cependant, j'ai une erreur de sémantique.
    J'utilise le module File::Copy avec la fonction copy comme ceci:

    Code :
    1
    2
    3
    4
    5
    6
     
    for (my $i=0;$i<@tabFichiersVH;$i++)
            {
                    $tabFichiersVH[$i]="/etc/apache2/sites-available/".$tabFichiersVH[$i];
                    copy ("$tabFichiersVH[$i]", $tabFichiersVH[$i]);
    }
    Cela me copie bien mes fichiers, mais cela prends tous les dossiers /etc/apache2/sites-availables.
    Alors que je ne voudrais QUE les virtualhost. Il me renvois l'erreur suivante:
    Code :
    1
    2
     
    '/etc/apache2/sites-available/default-ssl' and '/etc/apache2/sites-available/default-ssl' are identical (not copied) at Sauvegarde.pl line 63

    Je triture un peu mon code, mais la sémantique et moi ><.
    Merci ^^

  7. #7
    Membre éclairé Avatar de Mandraxx
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    mai 2011
    Messages
    171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Gers (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2011
    Messages : 171
    Points : 338
    Points
    338

    Par défaut

    Ben, soit tu ouvres chaque fichier pour l'analyser et savoir si c'est un de ceux qui t'intéressent.

    Soit tu définit un plan de nommage (genre tous tes fichiers vhosts commencent par vhost-) et tu pourras tester leurs nom avec un regex avant de les traiter.

    @+
    Le choix motivé par le seul argument de modernité est intrinsèquement dépourvu de créativité.

  8. #8
    Invité régulier
    Inscrit en
    décembre 2011
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : décembre 2011
    Messages : 40
    Points : 7
    Points
    7

    Par défaut

    Un regex avec tous les fichiers qui se termine par .conf sera une bonne idée.

  9. #9
    Expert Confirmé

    Inscrit en
    avril 2009
    Messages
    2 943
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : avril 2009
    Messages : 2 943
    Points : 3 367
    Points
    3 367

    Par défaut

    Citation Envoyé par Mandraxx Voir le message
    Perso, pour mon exemple, je ferais comme ça :
    Code :
    1
    2
    3
    for ($i=0;$i<$#files;$i++) {
            $files[$i]="/var/".$files[$i];
    }
    Mais bon, y'a peut être plus élégant .... (Je me débrouille mais je ne suis pas ce qu'on appelle un mongeur ;-)
    Je ne sais pas si c'est plus élégant, mais au moins plus direct :

    Code :
    @files = glob("/var/*.conf")
    (ce n'est pas strictement identique, j'ai intégré la dernière réponse de MonsieurPouet).

    Voir aussi : File::Glob
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Using strict and warnings is good for you.

  10. #10
    Membre éclairé Avatar de Mandraxx
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    mai 2011
    Messages
    171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Gers (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2011
    Messages : 171
    Points : 338
    Points
    338

    Par défaut

    Bonjour,

    Citation Envoyé par Philou67430 Voir le message
    Je ne sais pas si c'est plus élégant, mais au moins plus direct :
    Moi, en tous cas, je trouve ça plus élégant ;-)

    Merci .

    @+
    Le choix motivé par le seul argument de modernité est intrinsèquement dépourvu de créativité.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •