Script ftp qui rename apres copie

Salut,

j’aimerais créer un script pour pouvoir le lancer avec un cron qui une fois le get files executé renome les fichiers avec l’extension .bak.

c’est possible via commande ftp directement ?

#!/bin/bash
HOST=xxx.YYY.ZZZ.EEE 
USER=ftpuser             
PASS=password       

#-i turns off interactive prompting. 
#-n Restrains FTP from attempting the auto-login feature. 
#-v enables verbose and progress. 

ftp -inv $HOST << EOF
user $USER $PASS
cd /path/to/file
mget *.csv

# End FTP Connection
bye

EOF

j’ai 2 questions :blush:

comment je fais pour qu’il copie les *.CSV et *.csv ?
comment je fais pour qu’il m’ajoute l’extension .bak après la copie aux fichiers copiés comme ça je n’efface rien en cas de soucis et au prochain passage du script il ne me les reprend pas.

Merci de m’aider :stuck_out_tongue:

Salut,

au lieu du mget, je te propose une boucle for pour faire le traitement :

for f in $(ls)
do
  if [ $(echo $f|egrep '\.(csv|CSV)$') ]
  then
    mget $f
    mv $f $f.bak
  fi
done

Le $ dans le egrep signifie qu’il ne doit pas y avoir de caractères après .csv ou .CSV, cela va donc exclure les .csv.bak

Merci,

voila ce que j’ai mis :

#!/bin/bash
HOST=XXX.YYY.ZZZ.OOO
USERFTP=user
PASSWORD=xxx
PORT=2222
cd /home/sysadmin/testftp


ftp -inv $HOST 2222 <<EOF
quote USER $USERFTP
quote PASS $PASSWORD
cd  /home/ftp/

for f in $(ls) do
  if [ $(echo $f|egrep '\.(csv|CSV)$') ]
  then
    mget $f
    mv $f $f.bak
  fi
done

il n’aime pas trop :

Remote system type is UNIX. Using binary mode to transfer files. 331 Password required for useripad 230 User useripad logged in 250 CWD command successful We only support non-print format, sorry. ?Invalid command ?Invalid command (remote-files) Illegal PORT command ftp: bind: Address already in use Illegal PORT command can't find list of remote files, oops ?Invalid command ?Invalid command 221 Goodbye.

je vais devoir changer pour “expect” je pense

:blush:

Effectivement, je n’avais pas fait attention au fait que les commandes qui suivent la commande ftp doivent être des commandes reconnues par ftp.
Après une petite recherche, tu peux t’inspirer de ceci

je vais essayer avec curlftpfs je pourrai exécuter ta boucle “for” je pense.

[code]#!/bin/bash
curlftpfs user@ftp.server.com:2222//home/ftp /mnt/ftp

for f in $(ls) do
if [ $(echo $f|egrep ‘.(csv|CSV)$’) ]
then
scp $f scp -i ~/.ssh/id_rsa sysadmin@10.100.0.100:/home/ipad
mv $f $f.bak
fi
fusermount -u /mnt/ftp
done[/code]