+ 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 : 8
    Points
    8

    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 : 8
    Points
    8

    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
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Gers (Midi Pyrénées)

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

    Informations forums :
    Inscription : mai 2011
    Messages : 179
    Points : 370
    Points
    370

    Par défaut

    Bonjour,

    Pas besoin, Perl fait ça tout seul comme un grand :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : 8
    Points
    8

    Par défaut

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

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $saveTar -> add_files(@tabFichiersVH);
    Il me dit que les fichiers ne sont pas trouvés :/

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Gers (Midi Pyrénées)

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

    Informations forums :
    Inscription : mai 2011
    Messages : 179
    Points : 370
    Points
    370

    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : 8
    Points
    8

    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Gers (Midi Pyrénées)

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

    Informations forums :
    Inscription : mai 2011
    Messages : 179
    Points : 370
    Points
    370

    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 : 8
    Points
    8

    Par défaut

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

  9. #9
    Expert Confirmé Sénior

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    avril 2009
    Messages
    3 312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : avril 2009
    Messages : 3 312
    Points : 4 724
    Points
    4 724

    Par défaut

    Citation Envoyé par Mandraxx Voir le message
    Perso, pour mon exemple, je ferais comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    @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é
    Si c'est utile, say

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

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

    Informations forums :
    Inscription : mai 2011
    Messages : 179
    Points : 370
    Points
    370

    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é.