Il m’arrive parfois d’avoir à envoyer des fichiers sur mon hébergement.
Le besoin d’utiliser un logiciel ftp tel filezilla est parfois gênant. En effet, selon la taille et la vitesse d’envoi cela peut prendre un certain temps.
J’ai donc cherché une solution permettant d’utiliser un script bash et par là même cron. Je voulais au lancement du PC pouvoir lancer ou reprendre l’envoi et savoir quels fichiers avaient été envoyés.
Curl répond à ce besoin. Je vais donc exposer ici la marche suivie pour atteindre le résultat attendu.
Le besoin est simple :
Envoyer des fichiers situés dans un répertoire déterminé vers mon hébergement. Mais je ne souhaite pas inclure dans le script les nom d'utilisateur
et mot de passe
. L’utilisation du fichier .netrc
s’impose donc (je vous laisse voir la documentation le concernant).
De plus, je souhaite qu’une fois envoyé le fichier soit supprimé afin d’éviter de multiples envois inutiles si par exemple il y a une coupure électrique avant la fin de l’exécution du script.
Dans le même but, l’utilisation de la reprise d’envoi est indispensable.
Afin de disposer du nécessaire pour mon projet je crée un répertoire nommé envoiftp
dans lequel je déposerai les fichiers à envoyer sur mon hébergement.
cd => on se rend dans le répertoire personnel de l'utilisateur
mkdir envoiftp => on crée le répertoire d'envoi
#!/bin/bash
cd $HOME/envoiftp
for fic in $PWD/*
do
echo $fic
done
cd
Ce script simple permet de lister les fichiers présents dans le répertoire courant et de les afficher.
curl -C - --netrc --upload-file <fichier> ftp://ftp.<nom de domaine>/<répertoire destination>/
-C -
: Permet de reprendre un transfert interrompu.--netrc
: utiliser le fichier .netrc
pour le nom d’utilisateur et le mot de passe.--upload-file
: indique le nom du fichier à transférer.Pour s’assurer que la ligne de commande ne comporte pas d’erreur, il peut être utile de la tester.
#!/bin/bash
cd $HOME/envoiftp
for fic in $PWD/*
do
curl -C - --netrc --upload-file $fic ftp://ftp.exemple.test/test/
done
cd
Avec ce script nous transférons tout les fichiers contenus dans /home/moi/envoiftp
vers ftp.exemple.test/test/
.
Toutefois, si une interruption du script intervient le script pourrai tenter de transférer à nouveau les fichiers déjà transférés. Pour éviter de balayer à nouveau la totalité des fichiers déjà transférés, il suffit à la fin de chaque transfert de supprimer le fichier.
Ceci amène la modification suivante du script :
#!/bin/bash
cd $HOME/envoiftp
for fic in $PWD/*
do
curl -C - --netrc --upload-file $fic ftp://ftp.exemple.test/test/
rm $fic
done
cd
Il ne reste plus qu’à enregistrer ce script et ajouter une ligne dans la table cron à l’aide de la commande crontab -e
.
@reboot /home/moi/scripts/envoiftp
Avec cela à chaque fois que l’on lancera le PC il ira voir s’il y a quelque chose dans le répertoire $HOME/envoiftp
pour l’envoyer sur l’hébergement.
Voilà qui est terminé.
Cet exemple est basique, il pourrai être amélioré de plusieurs façons :
Je vous laisse faire les améliorations qui vous passent par la tête.
Commentaires