Ftp script with date

Hi

I have the following script that should run every day:

#!/bin/sh
HOST=192.168.6.47
USER=user123
PASSWD=xyz123L

/usr/bin/ftp -inv <<EOF
open $HOST
user $USER $PASSWD
binary
cd /home/user123/scripts/loadDadosAppWeb/relatorios/25
mput *2017-06-23*
bye
EOF

Bu everyday I have to manually change the line where the date is mput *2017-06-23* .
Can you help me automate that? Instead of editing the script manually everyday

The command

date +*%Y-%m-%d*

will give you the format you need. Surround it with backtics (``) and it can be the subject of echo or can set the value of a script variable.

HTH

1 Like

that worked fine. But on the same line if I want to transfer the last file of the directory, like from this directory:

-rw-r--r--   1 rundamo  rundamo   746814 Jun 25 02:20 RundamoSettlement_1498349224609.csv
-rw-r--r--   1 rundamo  rundamo   640038 Jun 26 02:19 RundamoSettlement_1498435659922.csv
-rw-r--r--   1 rundamo  rundamo   645657 Jun 27 02:19 RundamoSettlement_1498522015755.csv
-rwxr-xr-x   1 rundamo  rundamo      202 Jun 27 14:39 ftp_tranf.sh
-rw-r--r--   1 rundamo  rundamo   668370 Jun 28 02:16 RundamoSettlement_1498608378768.csv
-rw-r--r--   1 rundamo  rundamo   670705 Jun 29 02:20 RundamoSettlement_1498694810954.csv
-bash-3.00$

in this case just the :

-rw-r--r--   1 rundamo  rundamo   670705 Jun 29 02:20 RundamoSettlement_1498694810954.csv

what could I be using

You could use one of these constructs:

myfile=$(ls -r $(date +'*%Y-%m-%d*') | head -1)
ls -r $(date +'*%Y-%m-%d*') | read myfile

Also do not put a password in a script! Use the .netrc file for storing your FTP servers:

machine 192.168.6.47 login user123 password mypass

and make it readable only by yourself.

#!/bin/sh
HOST=192.168.6.47
cd /home/user123/scripts/loadDadosAppWeb/relatorios/25
myfile=$(ls -r $(date +'*%Y-%m-%d*') | head -1)
/usr/bin/ftp -iv ${HOST}<<EOF
binary
put "${myfile}"
bye
EOF

Andrew

I got the following error when running the script:

230 User oracle logged in
200 Type set to I
250 CWD command successful
?Invalid command
200 Type set to I
(local-file) usage: put local-file remote-file
221 Goodbye.

Hi

I am trying a different way of doing that by copying the last file to a directory, them ftp the file to another server, but my cp command is failing with syntax error such as:

 pwd
/opt/fundamo/reports
-bash-3.00$ ls -lrt FundamoSettlement* | tail -1
-rw-r--r--   1 fundamo  fundamo   604080 Jul 17 02:18 FundamoSettlement_1500250109585.csv
-bash-3.00$ cp -p `ls -lrt FundamoSettlement* | tail -1` /opt/fundamo/reports/tobesent/
cp: illegal option -- w
cp: illegal option -- -
cp: illegal option -- -
cp: illegal option -- -
cp: illegal option -- -
cp: illegal option -- -
Usage: cp [-f] [-i] [-p] [-@] f1 f2
       cp [-f] [-i] [-p] [-@] f1 ... fn d1
       cp -r|-R [-H|-L|-P] [-f] [-i] [-p] [-@] d1 ... dn-1 dn
-bash-3.00$

please can you help?

The problem is you are passing the output of ls -l into cp . The cp command is effectively:

cp -rw-r--r--   1 fundamo  fundamo   604080 Jul 17 02:18 FundamoSettlement_1500250109585.csv /opt/fundamo/reports/tobesent/

Try

cp $(ls -1t FundamoSettlement* | head -1) /opt/fundamo/reports/tobesent/

In this case ls will list only the filenames. By removing the -r from ls and using head instead of tail you may also reduce time, particularly if the directory has hundreds of matching files.

Andrew

1 Like

thank you very much, it worked