2010-03-23 6 views
0

Je pense que j'ai écrit peut-être un script shell toute ma vie, et je ne suis même pas sûr si c'est possible, mais j'essaye d'écrire un script qui va ftp le contenu d'un répertoire, un à une fois. C'est-à-dire, il faudra ftp un, puis fermer la connexion, puis ftp le second, et fermer cela etc. C'est parce qu'il peut y avoir jusqu'à cinq fichiers dans un répertoire qui ont chacun un minimum de 2 Go chacun. Le fait de les envoyer tous en même temps entraîne toujours une réinitialisation de la connexion. Je pensais que si je pouvais faire correspondre par nom de fichier partiel, alors peut-être que cela aidera, car ils sont tous nommés de la même manière.correspondance de modèle de script shell?

Ainsi, dans un répertoire, il faudra:

SampleFileA_20100322_1.txt 
SampleFileA_20100322_2.txt 
SampleFileB_20100322_1.txt 
SampleFileC_20100322_1.txt 

Je voudrais ftp SampleFileA_xxxx_1 d'abord, puis SampleFileA_xxxx_2, etc. Ceci est le script ftp actuel, qui essaie de télécharger tout à la une fois ...

#!/bin/bash 
REMOTE='ftp.EXAMPLE.com' 
USER='USERNAME' 
PASSWORD='PASSWORD' 
FTPLOG='/tmp/ftplog' 
date >> $FTPLOG 

ftp -in $REMOTE <<EOF 
_FTP>>$FTPLOG 
quote USER $USER 
quote PASS $PASSWORD 
bin 
cd download 
mget * 
quit 
_FTP 
:wq! 
+0

'mget *' devrait obtenir les fichiers séquentiellement, pas simultanément. Quand la connexion est-elle réinitialisée? (par exemple, immédiatement? au milieu du premier fichier? après le premier fichier? plus tard?) – Isaac

+0

si votre connexion se réinitialise, il a quelque chose à voir avec vos paramètres réseau. Parfois, si vous avez des pare-feu entre les deux, le pare-feu peut avoir de tels délais activés. Ou parfois c'est à cause des réglages de timeout de tcp avec votre kernet etc. – ghostdog74

Répondre

1

en fonction de votre question, je pense que vous avez besoin de quelque chose comme

files=`ls Sample*txt` 

for file in $files 
do 
    run_ftp_function $file 
done 

vous devrez configurer "run_ftp_function" pour faire l'envoi (comme vous avez déjà) en utilisant $ 1 comme fichier à envoyer