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
wbport
June 27, 2017, 9:58am
2
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
fretagi:
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?
fretagi:
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