J’ai eu besoin de transferer par FTP des lots de 450 fichiers par intervalles de 15 minutes.
J’ai créé pour ce faire le script suivant qui copie les 450 fichiers présents dans le dossier local /home/dossier_transfert vers la racine FTP du site ftp.monsitedistant.org.
Ce script nommé transfert.sh est executé toutes les minutes par une tâche cron.
#!/bin/sh
# Script transfert.sh
# Ce script est executé par une tâche cron toutes les minutes mais
# ne fera rien tant qu'il ne s'est pas écoulé 15 minutes depuis
# le dernier transfert.
# On se place dans le dossier contenant les fichiers
cd /home/dossier_transfert
# On teste si un dossier atraiter existe (jeton)
if [ -d atraiter ]
then
exit 1
fi
# Initialisation des variables
i_fic=1
# Si le dossier done n'existe pas, on le créé
if [ ! -d done ]
then
mkdir done
# Puisque done n'existe pas, il s'agit du premier lot
i_lot=1
else
# On vient recuperer la liste des dossiers deja traites
last=$(ls -1d done/* | sed 's,done/dos,,g' | egrep -v '^$' | tail -1)
# Conversion string vers integer
i_lot=$(echo $last | sed 's,^0*,,g')
# On incremente le numero de lot
i_lot=$(expr ${i_lot} + 1)
fi
# Creation d'une chaine du numero de lot sur 4 digit
s_lot=$(printf "%0004d" ${i_lot})
VLOG=$(echo /var/log/transfert/rapport_transfert_${s_lot}.log)
OUTFTP=$(echo /var/log/transfert/outftp_${s_lot}.log)
ERRFTP=$(echo /var/log/transfert/errftp_${s_lot}.log)
cat /dev/null >${VLOG}
# On vient créer le dossier atraiter
mkdir atraiter
# Message de log
echo "Debut du Traitement du lot ${s_lot}" >>${VLOG}
echo "$(date)" >>${VLOG}
# On boucle sur tous les fichiers à traiter
for Fic in $(ls -1 | egrep -v '^atraiter$' | egrep -v '^done$' | egrep -v '^repart.sh$' | egrep -v '^transfert.sh$')
do
# On déplace le fichier courant dans le dossier atraiter
mv ${Fic} atraiter/
# Message de log
echo " Deplacement fichier atraiter/${Fic}" >>${VLOG}
# On incremente le compteur des fichiers
i_fic=$(expr ${i_fic} + 1)
# A t'on déplaçé 450 fichiers, si oui, on les transfert en FTP
if [ ${i_fic} -ge 451 ]
then
# On se place dans le dossier a traiter
cd atraiter
# Message de log
echo " Debut du Transfert du lot ${s_lot}" >>${VLOG}
echo "$(date)" >>${VLOG}
# On envoi le contenu du dossier atraiter sur le site distant
ftp -n 1>${OUTFTP} 2>${ERRFTP} <<MHPDATA
open ftp.monsitedistant.org
user moncompte "mon72mot12passe01"
passive
prompt
binary
mput *
bye
MHPDATA
# Message de log
echo " Fin du Transfert du lot ${s_lot}" >>${VLOG}
echo "$(date)" >>${VLOG}
# PAUSE de 1 quart d'heure
echo " Pause d'un quart d'heure pour le lot ${s_lot}" >>${VLOG}
sleep 15m
# On revient au niveau des fichiers a traiter
cd ..
# Deplacement du lot courant dans le dossier done
if [ -d atraiter ]
then
mv atraiter done/dos${s_lot}
# Message de log
echo " Deplacement dossier atraiter dans done/dos${s_lot}" >>${VLOG}
fi
# Message de log
echo "Fin du Traitement du lot ${s_lot}" >>${VLOG}
echo "$(date)" >>${VLOG}
# sortie du programme
# ATTENTION, le dernier dossier atraiter qui contiendra moins de 450 fichiers
# sera a traiter manuellement
exit 0
fi
done