Boucle sur liste de fichiers distants (ssh)

Fermé
gnu - 13 févr. 2012 à 18:24
 gnu - 15 févr. 2012 à 18:06
Bonjour,

Je souhaite récupérer une liste de fichiers dans un script bash
Comme on pourrait le faire de cette façon:

#!/bin/bash
for i in *.txt
do
...
done
#Ce qui me permet bien de traiter chaque fichier, même si son nom contient des caractères spéciaux comme l'espace ou le saut de ligne.


Mais comment le faire depuis un serveur distant en utilisant ssh ?
Quelque chose comme : for i in serveur:*.txt ; do ...


Merci !

3 réponses

zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 408
13 févr. 2012 à 18:31
Salut,

ssh -p 22 login@serveur  '/bin/bash -s'  < ./ton_script.sh

0
Impec! C'est exactement ce que je voulais
C'est si simple que je me sens bête de ne pas y avoir pensé...
Merci!
0
Je rencontre un petit problème tout de même, peut être pourriez vous m'aider :

Si au lieu de chercher"*.txt", je dois affiner ma recherche pour chercher
"fichier num *.txt"

Je n'arrive plus à faire ma boucle correctement :

for i in "fichier num *.txt" => Traite le tout comme 1 valeur de liste, * n'est pas interprété
for i in fichier num *.txt => Traite fichier, num puis *.txt c'est à dire tous les fichiers texte...

Comment pourrais-je bien régler ceci ?
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 408
14 févr. 2012 à 15:05
for i in fichier num *.txt => Traite fichier, num puis *.txt c'est à dire tous les fichiers texte...
Ben c'est normal, c'est le but recherché non ?
0
non le but recherché est de matcher "fichier num 1.txt" "fichier num 2.txt" "fichier num 3.txt" , etc...
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 408
14 févr. 2012 à 19:00
Il fallait le dire tout de suite qu'il y avait des espaces dans tes noms de fichiers ;-(((

Dans ce cas là il te faut écrire ta syntaxe comme suite :

for i in fichier\ num\ *.txt 

ou utiliser "find" :

find . -type f -name "fichier num *.txt"
0
En fait le problème se pose en utilisant une variable
var="fichier\ num\ *.txt"
Ça ne marche plus.

L'idée c'est de faire ssh -p 22 login@serveur '/bin/bash -s' < ./ton_script.sh "fichier\ num\ *.txt"

et dans ton_script.sh :
for i in $1; do echo "$i"; done
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 408
15 févr. 2012 à 08:39
Utilises la commande find :

ssh -p 22 login@serveur '/bin/bash -s' < ./ton_script.sh "fichier num *.txt" 
Puis dans ton script :

find . -type f -name "$1"
Commande find à adapter à tes besoins...
0