[ssfr] Script bash, FTP et verif de repertoire

[ Thread Index | Date Index | More debianworld.org/shellscript-fr Archives ]


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 ;)



Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/