Boucle sur liste de fichiers distants (ssh)

gnu -  
 gnu -
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

  1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
     
    Salut,

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

    0
  2. gnu
     
    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
  3. gnu
     
    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
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      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
    2. gnu
       
      non le but recherché est de matcher "fichier num 1.txt" "fichier num 2.txt" "fichier num 3.txt" , etc...
      0
    3. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      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
    4. gnu
       
      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
    5. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      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