Bonjour,
mon problème, dans le code suivant, est que je ne peux pas envoyer plus d'un fichier sur le serveur distant.
Pourtant mon expression régulière match bien avec plusieurs fichiers. La boucle avec le 1er print() affiche bien tous les noms des fichiers à envoyer. Mais seul le premier fichier listé est déposé sur le serveur distant.
J'ai essayé en commentant la ligne "next if ()" et l'envoi de tous les fichiers fonctionne à merveille. Tous les fichiers sont déposés sur le serveur distant.
Pouvez-vous m'expliquer pourquoi je ne peux pas filtrer à la volé la lecture de mon répertoire et faire un envoi sélectif ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 opendir(my $fh_rep, $REP_SOURCE) or die("Impossible d'ouvrir le repertoire source: ".$!); open(my $fh_pipe, '|ssh '.$USER_DISTANT.'@'.$HOST_DISTANT." 'cd ".$REP_DISTANT."; tar -xf -'") or die("Impossible d'ouvrir le flux TAR over SSH: ".$!); while( (my $fic_data = readdir($fh_rep)) ) { next if ($fic_data !~ m/^\d{7}\.txt$/); print("Envoi le fichier '".$fic_data."'\n"); my $commande_a_lancer = 'cd '.$REP_SOURCE.'; tar -cf - '.$fic_data; print($fh_pipe `$commande_a_lancer`); my $CR = $?>>8; print("Une erreur s'est produite sur l'envoi du fichier '".$fic_data."'.\n") if ($CR != 0); } close($fh_pipe);
Quelle est la solution si je ne souhaite pas passer par 2 boucles (une qui liste les fichiers voulu et l'autre qui les envoie) ?
Merci d'avance pour votre aide.
Partager