Bonjour,
Je cherche à transférer automatiquement des fichiers des données d'un PC vers une station UNIX distante. Pour cela, j'ai besoin d'un script (.bat) pour automatiser des transferts sécurisés géré par la Gestion de tâches planifiées de Windows à intervalle de temps régulier.
Synoptique :
1- se placer dans un répertoire c:\envoi par exemple
2- faire la liste des fichiers de type "12345.toto.tar" dont "12345" est la taille du fichier et écrire les noms dans un fichier "fic_à_envoyer.txt"
3- si liste vide alors on stop
4- si la taille du fichier = 1ere partie du nom du fichier (ex: 12345)
alors on fait le transfert (sftp ou scp ou ssh) et on déplace le fichier transféré dans un autre répertoire du type "LAUNCH_Job\" pour ne pas le retransférer une autre fois.
sinon on passe au fichier suivant dans la liste "fic_à_envoyer.txt"
ou autre façon :
1- se placer dans un répertoire c:\envoi par exemple
2- lister les fichiers de type "12345.toto.tar" dont la taille = 1ere partie du nom du fichier et écrire leur nom dans un fichier "fic_à_envoyer.txt"
3- si liste vide alors on stop
4- sinon on fait le transfert (sftp ou scp ou ssh) et on déplace le fichier transféré dans un autre répertoire du type "LAUNCH_Job\"
Remarque: La taille du fichier est écrite en préfixe dans le nom du fichier et est séparé par un point.
J'ai commencé à écrire un script en DOS qui ressemble à ca, mais si on peut le faire en Python, ca m'intéresse!
: debut
set mydate=%date:~6,4%%date:~3,2%%date:~0,2%
set mytime=%time:~0,2%%time:~3,2%%time:~6,2%
Set MyCurDir=%CD%
dir /b "%CD%\*.tar" > "%CD%\fic_in_%mydate%_%mytime%.txt"
dir fic_in_%mydate%_%mytime%.txt |find "%1" > resnul.txt
for /f "tokens=5 delims=\" %%i in (resnul.txt) do set taille= %%i
if not %taille% == 0 (
psftp host -l user -pw password -b %CD%\LAUNCH_Job.txt
) else (
echo le fichier est vide
goto fin
)
IF ERRORLEVEL 0 goto debut
move %CD%\*.tar %CD%\Job_Launch\.
:fin
Remarque : la fichier "LAUNCH_Job.txt", contient les lignes de commande :
cd /tmpdir/envoi/
mput *
La boucle "for" ne fonctionne pas bien car la commande ne renvoie pas la "taille" et je ne sais pas pourquoi.
Merci d'avance.
Message édité par benjikos le 19-01-2011 à 18:25:34