[FTP]Transferer une liste de fichiers

Résolu
Bonjour,

Je désire transférer une liste de fichiers contenu dans un dossier, ou le dossier en entier. Pour l'instant j'ai tenté cela mais en vain :

-Pour envoyer chaque fichier :
ftp -pnv $REMOTESERVER << EOT
user $USERNAME $PASSWORD
prompt
mkdir $REMOTEPATH/$DATEJOUR
cd $REMOTEPATH/$DATEJOUR
!LISTTARCLI='ls $HOME/$USFILE/$DATEJOUR/'
!for y in $LISTTARCLI; do
	put $y
!done
bye
EOT


-Pour envoyer le dossier :
ftp -pnv $REMOTESERVER << EOT
user $USERNAME $PASSWORD
prompt
mkdir $REMOTEPATH
cd $REMOTEPATH
put $HOME/$DATEJOUR
bye
EOT


merci pour votre aide ! :)

2 réponses

  1. Modérateur
    Ça n'a pas de sens de mettre des commandes ftp dans un script shell. Il faut éventuellement que tu passes tes directives ftp en paramètre de la commande ftp (si elle peut lire dans un fichier) ou par le biais de l'opérateur << EOF.

    Par exemple avec lftp tu pourrais écrire un truc du genre, mais je suis pas sûre que la commande ftp le permette :

    #!/bin/sh 
    echo "user ?" 
    read user 
    echo "password ?" 
    read password 
    echo "host ?" 
    read host 
    echo "file ?" 
    read file
    
    lftp -u $user,$password $host << EOF 
    cd /toto 
    put $file
    exit 
    EOF


    Bonne chance
    0
    1. Bonjour, merci d'avoir pris le temps de me répondre.

      J'utilise déjà la commande ftp avec l'opérateur "EOF" (chez moi c'est EOT). Mon problème n'est pas pour transférer un fichier par FTP, mais de transférer tous les fichiers d'un dossier ou le dossier en entier.

      EDIT : Je viens de trouver la solution: Il suffit d'utiliser la commande "mput" avec comme paramètre "*" pour indiquer tous les fichiers du dossier dans lequel on se situe. Voilà ca que ça donne pour moi :

      # On crée le repertoire où l'on stocke les sauvegardes locales 
      mkdir $HOME/$USFILE/$DATEJOUR 
      
      # On s'y place dedans pour faciliter la commande FTP par la suite 
      cd /$HOME/$USFILE/$DATEJOUR 
      
      # On crée une archive pour chaque dossier 
      LISTCLIENTS='ls $HOME/$USPATH/' 
      for x in $LISTCLIENTS; do 
       echo "compression de $x :" 
       tar -czf $HOME/$USFILE/$DATEJOUR/$x.tar.gz $HOME/$USPATH/$x 
      done 
      
      # On envoi les fichiers du dossier courant vers un serveur distant 
      ftp -pnv $REMOTESERVER << EOT 
      user $USERNAME $PASSWORD 
      prompt 
      mkdir $REMOTEPATH/$DATEJOUR 
      cd $REMOTEPATH/$DATEJOUR 
      mput * 
      bye 
      EOT


      En espérant que ça en aidera d'autres !
      Merci pour l'aide !
      0
      1. Bonjour,

        Effectivement, prompt off puis mput * transférera tous les fichiers.
        En autre solution, tu pouvais aussi utiliser ftpfs pour monter ton FTP sous forme de filesystem dans ton arborescence, et utiliser les commandes habituelles de copie.
        0