Précédent   Forum du club des développeurs et IT Pro > Autres langages > Perl > Programmation et administration système
Programmation et administration système Vos questions sur les scripts d'administration système, création de compte utilisateur, socket, fork, ping, etc...
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 20/02/2012, 16h12   #1
MonsieurPouet
Invité régulier
 
Inscription : 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
MonsieurPouet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/02/2012, 09h40   #2
MonsieurPouet
Invité régulier
 
Inscription : décembre 2011
Messages : 40
Détails du profil
Informations forums :
Inscription : décembre 2011
Messages : 40
Points : 7
Points : 7
Une idée ?
MonsieurPouet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2012, 09h35   #3
Mandraxx
Membre éclairé
 
Avatar de Mandraxx
 
Homme
Architecte de système d'information
Inscription : mai 2011
Messages : 168
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 34
Localisation : France, Gers (Midi Pyrénées)

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

Informations forums :
Inscription : mai 2011
Messages : 168
Points : 374
Points : 374
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é.
Mandraxx est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 22/02/2012, 17h21   #4
MonsieurPouet
Invité régulier
 
Inscription : décembre 2011
Messages : 40
Détails du profil
Informations forums :
Inscription : décembre 2011
Messages : 40
Points : 7
Points : 7
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
MonsieurPouet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2012, 07h37   #5
Mandraxx
Membre éclairé
 
Avatar de Mandraxx
 
Homme
Architecte de système d'information
Inscription : mai 2011
Messages : 168
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 34
Localisation : France, Gers (Midi Pyrénées)

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

Informations forums :
Inscription : mai 2011
Messages : 168
Points : 374
Points : 374
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é.
Mandraxx est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 23/02/2012, 15h31   #6
MonsieurPouet
Invité régulier
 
Inscription : décembre 2011
Messages : 40
Détails du profil
Informations forums :
Inscription : décembre 2011
Messages : 40
Points : 7
Points : 7
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 ^^
MonsieurPouet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2012, 15h43   #7
Mandraxx
Membre éclairé
 
Avatar de Mandraxx
 
Homme
Architecte de système d'information
Inscription : mai 2011
Messages : 168
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 34
Localisation : France, Gers (Midi Pyrénées)

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

Informations forums :
Inscription : mai 2011
Messages : 168
Points : 374
Points : 374
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é.
Mandraxx est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2012, 16h03   #8
MonsieurPouet
Invité régulier
 
Inscription : décembre 2011
Messages : 40
Détails du profil
Informations forums :
Inscription : décembre 2011
Messages : 40
Points : 7
Points : 7
Un regex avec tous les fichiers qui se termine par .conf sera une bonne idée.
MonsieurPouet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/03/2012, 12h01   #9
Philou67430
Expert Confirmé
 
Inscription : avril 2009
Messages : 2 641
Détails du profil
Informations personnelles :
Âge : 47

Informations forums :
Inscription : avril 2009
Messages : 2 641
Points : 3 092
Points : 3 092
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.
Philou67430 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 08/03/2012, 07h29   #10
Mandraxx
Membre éclairé
 
Avatar de Mandraxx
 
Homme
Architecte de système d'information
Inscription : mai 2011
Messages : 168
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 34
Localisation : France, Gers (Midi Pyrénées)

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

Informations forums :
Inscription : mai 2011
Messages : 168
Points : 374
Points : 374
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é.
Mandraxx est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 07h44.


 
 
 
 
Partenaires

Hébergement Web