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:
ftp -vin @IP_SRV_FTP < fichier 2>&1 > ftp.log
Le fichier texte:
Code:
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:
# ./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:
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,