Dans le cadre d'un projet, je dois transférer plusieurs fichiers par SFTP.
Voila la fonction que j'ai crée (plus ou moins bien faite, n'étant pas expert en shell... )

Je développe en ksh

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
 
sftpUploadFile() {
 
	if [ $# -ne 4 ]; then
		echo "sftpUploadFile() : Appel incorrect"
		echo "usage   : sftpUploadFile <rmt_host> <rmt_dir> <file> <log_file>"
	else
		RMT_HOST=${1}
		RMT_DIR=${2}
		FICHIER=${3}
		FIC_LOG=${4}
	fi
 
        sftp ${RMT_HOST} 2>>${FIC_LOG} >>${FIC_LOG} <<END_SFTP_SESSION
		cd ${RMT_DIR}
		mput ${FICHIER}
        END_SFTP_SESSION
        CR=$?
 
        if [ ! ${CR} -eq ${RC_OK} ]; then
		doLog "${szMsgERROR}" "La connexion au serveur distant a échouée (CR : $CR)"
		finScriptError
        fi
 
}
Et donc à chaque fichier de la liste, j'appel cette fonction. Ce qui veut dire une ouverture de session pour chaque ce qui n'est vraiment pas terrible je vous l'accorde.

J'essaie donc de trouver le bout de code qui me manque pour boucler sur une liste de fichiers une fois la session ouverte :

Un peu comme ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
sftp ${RMT_HOST} 2>>${FIC_LOG} >>${FIC_LOG} <<END_SFTP_SESSION
		cd ${RMT_DIR}
                cat ${LIST} | while read ${FICHIER}
                do
		        mput ${FICHIER}
                done
END_SFTP_SESSION
Mais ca ne fonctionne pas, puisque c'est le shell distant (sftp) qui essaie d'interpréter ces commandes, ce qui est compréhensible.

Alors comment faire ?

Avis aux experts (ou pas) que je remercie par avance