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

Shell et commandes GNU Discussion :

Optimisation script de validation FTP


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné Avatar de Leeloo_Multiboot
    Profil pro
    Administrateur Unix/Linux
    Inscrit en
    Avril 2008
    Messages
    417
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur Unix/Linux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2008
    Messages : 417
    Par défaut Optimisation script de validation FTP
    Bonjour,

    J'ai à réaliser une procédure de validation de transferts de fichiers par FTP qui sera également chargée de réémettre les-dits fichiers en cas de problème.
    J'ai donc réalisé un script Bash.
    La procédure consiste en:

    - Lancer les transferts de fichier avec l'option verbose de la commande ftp et rediriger la sortie standard vers un fichier de log. Les infos de connexion et de transferts sont contenues dans un fichier texte.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ftp -vin @IP_SRV_FTP < fichier 2>&1 > ftp.log
    Le fichier texte:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    user Utilisateur Password
    ascii
    lcd /dossier
    cd /recup
    send fichier*
    ls
    quit
    - Faire un ls dans le dossier local et un ls sur le serveur FTP.
    - Récupérer et traiter leur contenu afin d'obtenir les noms des fichiers et leurs tailles.
    - Tester les tailles des fichiers locaux avec celles des fichiers distants.
    - Réémettre ces fichiers si la taille ne correspond pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    # ./ftp.sh /dossier/ /dossier/ftp.log
    Je passe en paramètre le chemin des fichiers qui ont été envoyés et le chemin du fichier de log du transfert.

    Le code:

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
    #!/bin/bash
    # On supprime les fichiers temporaires 
    rm -rf /dossier/reemission
    rm -rf /dossier/liste_locale
     
    # On liste le contenu du répertoire passé en 1er paramètre dans un fichier
    # On récupère des lignes de la forme: fichier taille_fichier
     
    ls -l $1 | sed '1d'| awk '{printf $9" "}{print $5}' >> /dossier/liste_locale
     
    # Pour chaque ligne:
     
    cat /dossier/liste_locale | while read line
    do
    	# On récupère la taille et le nom du fichier des fichiers locaux
     
    	nom=`echo $line | cut -d ' ' -f1`
    	taille=`echo $line | cut -d ' ' -f2`
     
    	# On affecte à deux variables les valeurs de la taille du fichier d'origine et celle du fichier transmis
     
    	taille_origine=$(cat $2 | awk '/'$nom'/{printf '$taille'}')
    	taille_transferee=$(cat $2 | awk '/'$nom'/{print $5}')
     
    	# On teste le contenu des 2 variables. Si différents, alors on ajoute au fichier de réemission
     
    	if [ $taille_origine != $taille_transferee ];then
     
    		# On teste si le fichier de réemission  est deja crée
     
    		if [ ! -f /dossier/reemission ];then
    			echo "user Utilisateur Password" >>/dossier/reemission
            		echo "ascii" >>/dossier/reemission
            		echo "cd répertoire_distant" >>/dossier/reemission
    			echo "lcd "$1 >>/dossier/reemission 
    		fi
    		echo "send "$nom >>/dossier/reemission
    	fi
    done
     
    	# On finalise le fichier de reemission une fois les lignes traitées
    		echo "quit" >>/dossier/reemission
     
    # On réemet les fichiers qui n'ont pas été correctement envoyés
     
    ftp -vin @IP_FTP </dossier/reemission 2>&1 >> /dossier/reemission.log

    J'ai codé en dur l'adresse FTP du serveur, le login et le mot de passe pour tester.
    Le script réalisé fonctionne, mais j'aimerai des avis quant à une éventuelle optimisation et amélioration. De même, s'il est judicieux dans ses tests et traitement de chaînes.

    Merci d'avance,

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 792
    Par défaut
    Je ne suis pas rentré dans ton script, qui m'a l'air correct à première vue, mais j'utilise fréquemment curl pour mes transferts ftp. Plus simple à intégrer dans un script et très véloce.
    http://curl.haxx.se/docs/manual.html

    Sinon, pour éviter la redirection d'un fichier des commandes ftp tu peux aussi utiliser la syntaxe HEREDOC.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ftp -i -v -n ${FTP_SERVER} <<HEREDOC_FTP
    user Utilisateur Password
    ascii
    lcd /dossier
    cd /recup
    send fichier*
    ls
    quit
    HEREDOC_FTP

  3. #3
    Membre chevronné Avatar de Leeloo_Multiboot
    Profil pro
    Administrateur Unix/Linux
    Inscrit en
    Avril 2008
    Messages
    417
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur Unix/Linux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2008
    Messages : 417
    Par défaut
    Merci pour l'info sur Curl
    D'après le peu que j'ai pu testé, c'est en effet performant

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 792
    Par défaut
    ... et beaucoup plus facile à intégrer à un script. Imagine que tu souhaite *ajouter* le contenu d'un fichier local à la fin d'un fichier distant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    curl -T fichier.local -a ftp://user:motDePasse@site-ftp.fr/repertoire/vers/fichier.distant
    Je ne sais même plus trop comment faire ça par la commande ftp.

Discussions similaires

  1. script perl pour ftp
    Par donny dans le forum Modules
    Réponses: 5
    Dernier message: 29/09/2006, 12h02
  2. Script transfert fichier ftp
    Par donny dans le forum Linux
    Réponses: 1
    Dernier message: 20/09/2006, 09h02
  3. Classe ou script de validation des formulaires.
    Par __fabrice dans le forum Langage
    Réponses: 22
    Dernier message: 30/12/2005, 10h26
  4. Script de connection FTP
    Par 12_darte_12 dans le forum Linux
    Réponses: 12
    Dernier message: 08/11/2005, 16h28
  5. (MS DOS) Script de connections FTP
    Par Furius dans le forum Windows
    Réponses: 14
    Dernier message: 06/10/2005, 18h45

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