关闭

几个ftp shell的例子汇总

1727人阅读 评论(0) 收藏 举报

[jyfx@aydmk1 app]$ cat get.sh
ftp -n -i -v <<EOF
open 10.87.25.118
user topeng i1love_mm
bin
lcd /home/jyfx/dm_etl/app/bin
cd /home/topeng/topetl/app/bin
mget *.jar
quit
EOF

 

 

 

#!/bin/ksh

#检查是否能连接到24.3
ping 10.243.24.3
#如果能ping通
if [ "$?" -eq "0" ]
then
#连接到ftp
ftp  -i  -n 10.243.24.3<<EOF
#用户名,密码登陆
user emip emip
#指定远端目录
cd  /global/data1/emip/dist/nsm_home/domaincfg/
#指定本地目录
lcd  /export/home/dwsy/domaincfgBAK/
#批量取得以xml后缀名的文件
mget *.xml 
#断开ftp
close
bye
#ftp内容执行完毕
EOF
   #进入本地目录  
   cd  /export/home/dwsy/domaincfgBAK/
   #将下载的文件打包,2005年12月15日17时50分00秒,名为bak20051215175000.tar.gz
   tar cvf bak`date +%Y%m%d%H%M%S`.tar *.xml
   #将下载的文件打gzip包
   gzip *.tar
   #完成定时任务,删除3天前的文件
   find . -mtime +3 -exec rm -f {} /;
fi

  

                         ftp_getfile.sh使用说明
 我先把我们能够正常运行的那个shell原封不动发给你
 你可能也要自己改一下,应该能保证你最简单的调通
 
内容如下
#!/usr/bin/bsh
#----------------------------------------------------
#读取配置文件中的目录,从数据集市接口服务器响应的目录中得到文件
#ZHT
#----------------------------------------------------
I=1
while [ $I -lt 10 ]
do
echo "join"
cd /etl/shell
usrname="root"
usrpass="root"
filedate=`date +%Y%m%d%H%M%S`.dat
file_config="file_dir.cfg"
for i in `cat $file_config`
do
 local_dir=`echo $i|awk -F "&" '{print $1}'`
 ftp_dir=`echo $i|awk -F "&" '{print $2}'`
 cd $local_dir
 if [ -f $filedate ]
 then
    rm -rf $filedate
 fi
 
 #----------------------------
 #取得响应目录下的文件的列表
 #----------------------------
 (echo "user $usrname $usrpass"
   echo "cd $ftp_dir"
   echo "prompt off"
   echo "nlist $ftp_dir $local_dir/$filedate"
   echo "by")|ftp -v -i -n 10.243.216.177
  
   #---------------------------
   #读取文件列表文件,取得得到文件
   #---------------------------
   for j in `cat $filedate|awk 'substr($0,1,1)=="-" && substr($9,1,1)!="." {print $9}'`
   do
     oldfilename=$j
     newfilename=$j.tmp
     filelength=`cat $filedate|grep "$j"|awk '{print $5}'`
     (echo "user $usrname $usrpass"
      echo "cd $ftp_dir"
      echo "rename $oldfilename $newfilename"
      echo "get $newfilename"
      echo "delete $newfilename"
      echo "by")|ftp -v -i -n 10.243.216.177 >> $newfilename.log
      mv $newfilename $oldfilename
      localfilelength=`ls -l|grep $oldfilename|grep -v "tmp.log"|awk '{print $5}'`
      if [ "$filelength" -eq "$localfilelength" ]
      then
        echo "get file $oldfilename is cuccessfull"
        rm $newfilename.log
      else
        echo "get file $oldfilename is failed">>$filedate.err.log
      fi;
   done
   rm $filedate  
done
 sleep 1800
done
 
 
 
你只要改一下
兰色部分
 
cd /etl/shell
 
例如 我这个shell叫做ftp_getfile.sh /etc/shell 就是我这个ftp_getfile.sh所在的目录,同时也是配置文件file_dir.cfg所在的目录
 
 echo "by")|ftp -v -i -n 10.243.216.177 >> $newfilename.log
 
例如 10.243.216.177 是你想ftp的主机,那么你需要改变这个这 IP地址 ,从而符合你那边的环境
 
 
同时你需要修改file_dir.cfg这个文件
说明file_dir.cfg
这是ile_dir.cfg一行
他的含义是
本地目录&远程目录,用&做分割符,
 
/ETL/DATASORT/FS/CAD_CODE&/JKDS/huawds/FS/CAD_CODE/_EXF
 
所以你只需要定义你的本地目录和和远程目录即可
 
 
 
但是这里不能保障你的
2)            提供一套保障文件完整性的机制,用于避免取到没有Geneate完成的的结果文件;
即如果你的文件还在生成阶段,那么就不能够正常下载
 
 
 
 
 
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:31083次
    • 积分:563
    • 等级:
    • 排名:千里之外
    • 原创:23篇
    • 转载:0篇
    • 译文:0篇
    • 评论:4条