2011-01-10 91 views
3

我有以下脚本,推动文件到远程位置:FTP脚本

#!/usr/bin/bash 
HOST1='a.b.c.d' 
USER1='load' 
PASSWD1='load' 
DATE=`date +%Y%m%d%H%M` 
DATE2=`date +%Y%m%d%H` 
DATE3=`date +%Y%m%d` 
FTPLOGFILE=/logs/Done.$DATE2.log 
D_FOLDER='/dir/load01/input' 

PUTFILE='file*un' 
ls $PUTFILE | while read file 
do 
    echo "${file} transfered at $DATE" >> /logs/$DATE3.log 
done 

ftp -n -v $HOST1 <<SCRIPT >> ${FTPLOGFILE} 2>&1 
quote USER $USER1 
quote PASS $PASSWD1 
cd $D_FOLDER 
ascii 
prompt off 
mput /data/file*un 
quit 
SCRIPT 

mv *un test/ 

ls test/*un | awk '{print("mv "$1" "$1)}' | sed 's/\.un/\.processed/2' |sh 
rm *unl 

我收到此错误输出:

200 PORT command successful. 
553 /data/file1.un: A file or directory in the path name does not exist. 
200 PORT command successful.

回答

0

FTP将远程站点和执行FTP手动命令。发生错误时,请仔细查看原因。 (使用“帮助”,如果你不知道ftp命令行。)

也许/data目录不存在。有没有人最近重新组织了上传目录,或者移动了ftp服务器的根目录?

5

一些改进:

#!/usr/bin/bash 
HOST1='a.b.c.d' 
USER1='load' 
PASSWD1='load' 
read Y m d H M <<<$(date "+%Y %m %d %H %M") # only one call to date 
DATE='$Y$m$d$H$M' 
DATE2='$Y$m$d$H' 
DATE3='$Y$m$d' 
FTPLOGFILE=/logs/Done.$DATE2.log 
D_FOLDER='/dir/load01/input' 

PUTFILE='file*un' 
for file in $PUTFILE # no need for ls 
do 
    echo "${file} transfered at $DATE" 
done >> /logs/$DATE3.log # output can be done all at once at the end of the loop. 

ftp -n -v $HOST1 <<SCRIPT >> ${FTPLOGFILE} 2>&1 
quote USER $USER1 
quote PASS $PASSWD1 
cd $D_FOLDER 
ascii 
prompt off 
mput /data/file*un 
quit 
SCRIPT 

mv *un test/ 

for f in test/*un # no need for ls and awk 
do 
    mv "$f" "${f/%.un/.processed}" 
done 

rm *unl 

我建议使用小写或大小写混合变量来降低名称冲突与shell变量的机会。

这些目录是否真的直接离开根目录?