IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Scripts/Batch Discussion :

Un souci : Script batch permet de copier un fichier sur une machine Linux distant


Sujet :

Scripts/Batch

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 8
    Par défaut Un souci : Script batch permet de copier un fichier sur une machine Linux distant
    Bonjour,

    Je veux automatiser un script qui se lance tous les jours sur un serveur win pour récupérer un fichier sur une machine distante linux :

    ce que j'ai fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    psftp user@hostname -pw passwd -bc -b script.bat
    le contenu de script.bat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    cd /répetoire_distant
    ls -lart fichier.txt #--> ici ça bloque
    ici je dois récupérer mon fichier.txt qui date j-1 ?
    get fichier.txt
    quit
    #--> c'est ici l'erreur le psftp ne lit pas les options de la commande ls ? avez-vous une idée comment devrais-je faire contourner le pbm pour passer des commandes bash dans psftp?

    Merci d'avance.

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 8
    Par défaut
    j'ai pu contourner le pbm en deux commande plink et psftp et ça marche très bien :

    1- j'ai crée un script shell sur ma machine distante (linux) et je l'exécute avec plink le résultat du script (le nom de fichier) est redirigé vers vers un fichier qui sera appelé par la commande psftp :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    plink -ssh user@host -pw pwd bash -l -c './script.sh' >> fichier.src
    la sortie est un nom de fichier à transférer qui sera concaténer dans fichier.src

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    cd /répetoire_distant
    get nom_fichier
    quit
    2- maintenant je transfert mon fichier que j'ai récupéré dans 1 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    psftp user@hostname -pw passwd -bc -b fichier.src
    Je n'arrive pas à affecter le résultat de la commande 1 dans le fichier.src d'une manière régulière en la remplaçant par une variable !!!

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 8
    Par défaut
    J'avance doucement, c'est pas encore à 100% ..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    @echo off
    set PSFTP_SERVER=xxxxx
    set USER=xxxxx
    set PWD=xxxxx
    set FIC_BACK=fic_backup.txt
    set psftpcmd=psftpcmd.txt
    
    plink -ssh user@host -pw pwd bash -l -c './script.sh' >> fic_back
    
    set FIC_BACK=fic_back
    
    echo cd /data/Test/ >> %psftpcmd%
    echo put %FIC_BACK% >> %psftpcmd%
    echo quit >> %psftpcmd%
    echo bye >> %psftpcmd%
    psftp user@host -pw pwd -bc -b psftpcmd.txt
    je bloque sur la redirection du resultat de la commande plink, comment puis-je l'affecter dans mon fichier psftpcmd.txt ? quelqu'un a une idée ou une astuce ? merci d'avance.

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 8
    Par défaut
    Comment puis-je mettre cette commande dans une variable?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    type C:\Programs\Test\fichier.txt
    nom_fichier
    
    set nom_fic='type C:\Programs\Test\\fichier.txt'
    
    echo %nom_fic%
    type C:\Programs\Test\fichier.txt
    pourquoi ça n'affiche pas : nom_fichier ?

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 8
    Par défaut
    j'ai trouvé la solution c'est très simple avec une boucle for

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    FOR /f "tokens=9 delims= " %nom_fic in ('type C:\Programs\Test\fichier.txt') do set %nom_fic
    
    REM tokens permet de position ta chaine de caractaire ou N° de la colonne
    REM delims perme de choisir ton delimiteur dans mon cas c'est un espace.
    --> set %nom_fic= le nom de mon fichier

    ça fonctionne et j'ai pu récupérer ma variable.

    on pourra le faire autrement avec une recherche sur une chaîne de caractère :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FOR /f  %nom_fic in ('type C:\Programs\Test\fichier.txt ^|find "chaîne"') do set %nom_fic

  6. #6
    Membre Expert
    Inscrit en
    Avril 2010
    Messages
    1 495
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 1 495
    Par défaut
    Salut,

    C'est quoi le contenu de "fichier.txt" ?

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 8
    Par défaut
    Hello,

    Le contenu de mon fichier est une liste des fichiers avec un suffixe de date genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    type fichier
    xxx_xxxx_xxxx_AAAAMMJJ_HHMMSS.log
    ...
    ...
    à la base était une liste de fichier que j'ai récupéré à partir de la machine distante linux.

    maintenant que j'ai la procédure de mon script batch comment puis-je l'automatisé avec une tache planifiée?
    la commande at ? y a t-il d'autre commande plus efficace genre contab en unix?

    Merci.

  8. #8
    Membre Expert
    Inscrit en
    Avril 2010
    Messages
    1 495
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 1 495
    Par défaut
    Peux-tu en quelques mots écrire ce que tu souhaites faire ? Car comme tu vas dans tous les sens, c'est pas évident au premier abord de cerner tes attentions... Tu veux rapatrier localement des fichiers à partir d'un serveur FTP distant, c'est ça ?

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 8
    Par défaut
    mon objectif est de faire un transfert sécurisé d'une liste de fichiers entre deux machine distante (serveur linux - serveur windows), je veux que mon script se lance chaque jour à partir de windows.

  10. #10
    Membre Expert
    Inscrit en
    Avril 2010
    Messages
    1 495
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 1 495
    Par défaut
    Dans ce cas, pour récupérer ta liste de fichiers log il suffit de faire une requête LIST à ton serveur SFTP.

    ta commande serait du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    psftp tes_options... ton_script > liste_fichiers.txt
    avec ton_script (que tu peux générer dynamiquement) ayant comme contenu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ls "repertoire_distant/*.log"
    quit
    N'ayant pas de serveur sftp, je ne peux pas utiliser la commande psftp et je ne peux donc t'en dire plus sur ses spécificités.

    Pour l'automatisation, tu peux utiliser le planificateur de tâche.

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 8
    Par défaut
    Citation Envoyé par minnesota Voir le message
    Dans ce cas, pour récupérer ta liste de fichiers log il suffit de faire une requête LIST à ton serveur SFTP.

    ta commande serait du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    psftp tes_options... ton_script > liste_fichiers.txt
    avec ton_script (que tu peux générer dynamiquement) ayant comme contenu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ls "repertoire_distant/*.log"
    quit
    N'ayant pas de serveur sftp, je ne peux pas utiliser la commande psftp et je ne peux donc t'en dire plus sur ses spécificités.

    Pour l'automatisation, tu peux utiliser le planificateur de tâche.
    au fait je le fait en deux étapes et ça marche, le soucis est comment faire une boucle pour Transférer les fichiers un par un.
    j'ai essayé ce bout de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for /f "delims=" %%i in ('type fichier.txt') do set N_ligne=%%i& set /a compt+=1&
    mais j'ai un retour d'erreur.

  12. #12
    Membre Expert
    Inscrit en
    Avril 2010
    Messages
    1 495
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 1 495
    Par défaut
    C'est normal qu'il y ait une erreur étant donné que tu ne sais pas ce que tu fais. Une solution, comme tu disposes de ta liste de fichiers dans "fichier.txt", c'est de construire un script FTP avec la liste des fichiers à rapatrier, enfin je suppose, mais bon, comme tu utilises des fois "put", des fois "get", c'est à s'y perdre.

    Quoi qu'il en soit, pour la piste que je te suggère, il suffit d'intégrer ces quelques lignes de code dans ton script cmd pour construire "psftpcmd.txt" avant de le transmettre pour traitement à psftp :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ...
    echo cd /data/test/>psftpcmd.txt
    for /f "tokens=* usebackq"" %%i in ("fichier.txt") do echo.get "%%~i">>psftpcmd.txt
    echo quit>>psftpcmd.txt
    psftp ...

Discussions similaires

  1. Copier un fichier sur une imprimante
    Par Delphi-ne dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 19/11/2009, 18h36
  2. Réponses: 3
    Dernier message: 07/01/2009, 11h00
  3. Réponses: 16
    Dernier message: 11/09/2008, 09h39
  4. copier un fichier sur une machine distante avec CP
    Par hammag dans le forum Administration système
    Réponses: 5
    Dernier message: 06/05/2008, 10h24
  5. Copier des fichiers d'une machine à une autre
    Par Empty_body dans le forum Réseau
    Réponses: 3
    Dernier message: 29/10/2006, 12h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo