[ssfr] Script bash, FTP et verif de repertoire |
[ Thread Index |
Date Index
| More debianworld.org/shellscript-fr Archives
]
- To: shellscript-fr@xxxxxxxxxxxxxxx
- Subject: [ssfr] Script bash, FTP et verif de repertoire
- From: "Le poulpe qui bloppe !" <monpoulpe@xxxxxxxxx>
- Date: Thu, 13 Aug 2009 15:23:28 +0200
- Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:reply-to:date:message-id :subject:from:to:content-type:content-transfer-encoding; bh=60qPnzDERpa87Urwa7wKHaG8lkkgHLiSqqYcHjwKix8=; b=pHkt/yGcKjGK3/iq8UN0g7GT/F5AD2nANi1hk6nLwoOPgbshnZ/RCDF9sBhvaC4Q26 emAKdgezPX3oHk8qI+hpCHBym9EAcdEZ3xZauXvldyrGryulYoOeuPHG1NW7bAAaCOXl jhYauNrWJ59Ybi4JiEwxOvrZB1NYVTEZ0CB70=
- Domainkey-signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:reply-to:date:message-id:subject:from:to:content-type :content-transfer-encoding; b=Lr32JQE4XORKRz0r0jF2bl5BuiZ4rN03/2kQOB8ge1UgH1sg7wCj0yXBigLF7K2BxO bms39Cg0AejI3b+vlo0yfTqr4TUWU+f0lNmgYcfPDu/PYT6ulzbxJr38I8bnaYSs0fTr MWMqR5NdaABpHvZOvm8gyNXDkBm72DXI18FCg=
Bonjour,
Je suis en train de m'ecrire un petit script qui me permet d'envoyer
un fichier sur un ftp. Jusque là rien de bien affolant.
Par contre, je n'arrive pas à trouver une solution qui me permette de
verifier si le repertoire distant existe sur le ftp, et que s'il
n'existe pas, alors je le crée.
Pour le plaisir, y'a quelques contraintes:
- du bash uniquement (pour la compatibilité)
- ftp et pas lftp ou zft (tjrs la compatibilité)
#############################################################################################
#############################################################################################
#!/bin/sh
# FTP reserve a la dedi:
VAR_FTP_SERVER_DEDI="dedibackup.dedibox.fr"
VAR_FTP_PORT_DEDI="21"
VAR_FTP_LOGIN_DEDI="USER"
VAR_FTP_PASSWORD_DEDI="PASS"
# Fonction affichant l'aide:
msghelp () {
echo "Usage: $0 -d /repertoire_distant -s /rep/file"
echo "-d /xxx Repertoire cible sur le FTP."
echo "-s /xxx Fichier source a uploader sur le FTP."
echo "-h, --help Affiche l'aide et exit."
exit 1
}
until [ -z "$1" ]; do
case "$1" in
-d)
[ -z "$2" ] && msghelp
REP_DEST="$2"
shift
;;
-s)
[ -z "$2" ] && msghelp
FILE=`basename ${2}`
LDIR=`dirname ${2}`
shift
;;
* )
msghelp
;;
esac
shift
done
ftp -pi -n ${VAR_FTP_SERVER_DEDI} ${VAR_FTP_PORT_DEDI} <<-PLOP01
quote USER ${VAR_FTP_LOGIN_DEDI}
quote PASS ${VAR_FTP_PASSWORD_DEDI}
binary
cd ${REP_DEST}
lcd ${LDIR}
put "${FILE}"
bye
PLOP01
exit 0
#############################################################################################
#############################################################################################
J'ai donc essayer des choses bien sales:
je decompose mon chemin distant souhaité
le liste / du ftp redirigé dans un fichier temporaire local.
je grep le fichier temporaire pour trouver le premier repertoire, si
je trouve, j'enchaine sur la commande cd, si je trouve pas, je crée le
repertoire.
Ensuite j'efface le fichier temporaire.
et je boucle pour chaque sous repertoire que j'essaye de descendre sur le ftp.
Deja, philosophiquement je trouve ca sale de passer par un fichier
temporaire local, ensuite cette méthode n'est pas utilisable en vrai.
En effet, le jour où j'essaye d'envoyer sur le ftp un fichier dans
/rep/tres/loin/et/tres/profond/dans/mon/arborecence le script va me
faire des tentatives de suicides impromptues.
Quelqu'un aurait-il une manière plus élégante de faire ca, et surtout
une qui marche?
Bonne fin de semaine ;)