Transfert FTP (sous UNIX)

bsad -  
 sebsauvage -
Bonjour,
Je veux transférer un fichier par FTP sous unix avec la commande "put" , mais je veux vérifier d'abord que le fichier que je veux transférer n'existe pas sur le serveur distant . Y a-ttil une commande pour ceci.
Merci

4 réponses

  1. Radu
     
    Salut,
    La commande est:

    ls | grep nom_du_fichier

    si la reponse est vide alors le fichier n'existe pas sur le serveur distant.

    J'espere que tu as compris ...

    Radu
    0
    1. bsad
       
      Merci Radu,
      Oui j'ai compris mais le problème est que je ne peux tester derrière. C'est à dire :
      Quand je fait le grep nom_fichier, j'ai la une ligne comportant le nom du fichier mais je ne peux pas faire du tes.
      Exemple :
      ftp nom_machine
      open 11.125.135.111
      use user mot_de_passe
      cd rep_distant
      ascii
      ls nom_fichier (ls tout court marche aussi)
      ..
      .. /* ICI JE VEUX DIRE SI nom_fichier existe alors ne pas faire de put */
      ..
      put nom_fichier
      bye
      exit($status)

      D'autre part, commet peut on s'assurer que le ftp s'est bien passé (comment recupérer le code retour du ftp).
      Merci à Radu et ceux qui peuvent m'aider aussi.
      0
  2. System admin
     
    Salut bsad
    Bon,
    Faire man ftp
    voir les options sunique ou runique
    Mais je ne suis pas sur

    Sinon pour ce que tu veux faire
    il faut faire un shell script
    qui teste la presence du fichier
    s il n est pas present alors tu declenches un ftp automatique

    exemple de ftp automatique
    creer un fichier
    .netrc dans la home du user en tant que user
    faire chmod 400 .netrc (le fichier doit etre lu que pour le user) (Sinon ca ne marche pas)
    le fichier .netrc
    est de la forme:
    machine SUN1 login user password userpasswd
    puis dans un fichier texte fixe ou que tu construit par exemple transfert
    tu met
    put fichier
    quit

    ensuite tu fais
    cat transfert |ftp SUN1

    voir les commandes rsh et rcp au cas ou
    0
    1. bsad
       
      Oui, mais comment on vérifie que le fichier existe ou pas sur le serveur distant alors qu'on n'y accède que par FTP.
      Je veux eviter de faire en plusieur fois le ftp parce que j'ai des fichiers très volumineux. C'est à dire je ne veux pas refaire un get de mon fichier (après le put) sur le serveur local depuis le serveur distant en lui donnant un autre nom et si le get ramène quelque chose alors mon put s'est bien déroulé (risque de prendre beaucoup de temps)
      0
  3. System admin
     
    Bon ben si tu n as que ftp
    Tu fais un script qui check la presence du fichier
    et un autre qui l envoie

    il faut rediriger la sortie standart vers un fichier du style
    cat transfertLS|ftp SUN1 >>testpresence.txt
    avec transfertLS ou il ya ls-la a la place de mput

    Soit dit en passant Chez moi
    si je fais ftp
    open SUN1
    user toto
    passwd titi
    ls -la trace
    je genere un fichier trace en local sous ma machine

    UTILISE DONC LA COMMANDE LS DE FTP POUR GENERER UN FICHIER DE TRACE ET SI IL EST PAS EN PLACE ENVOIE TON FICHIER.
    0
  4. sebsauvage
     
    Pourquoi pas faire ça en Python ?

    J'ai fait un script qui va chercher les mises à jour McAfee et qui les upload sur un serveur FTP local, en vérifiant d'abord la présence des fichiers.

    Pour mettre un fichier en vérifiant sa présence, ça fait un truc du genre:

    import ftp
    ftp_session = ftplib.FTP()
    ftp_session.connect('serveur_ftp',port)
    ftp_session.login('user','motdepasse')
    dat = ftp_session.nlst('sdat*.exe')
    if not dat:
    ____monfichier = open('SDATxxx.EXE,'rb')
    ____ftp_session.storbinary('STOR SDATxxxx.EXE, monfichier)
    ____monfichier.close()
    ftp_session.quit()

    Voilà... pas sorcier, non ?

    Python est un langage de script opensource, et il est disponible sur de nombreuses plateformes.
    http://www.python.org

    (J'ai mis les ____ parceque le forum CCM supprime les espaces)
    0