[jyfx@aydmk1 app]$ cat get.shftp -n -i -v <<EOFopen 10.87.25.118user topeng i1love_mm binlcd /home/jyfx/dm_etl/app/bincd /home/topeng/topetl/app/binmget *.jarquitEOF
#!/bin/ksh
#检查是否能连接到24.3ping 10.243.24.3#如果能ping通if [ "$?" -eq "0" ]then#连接到ftpftp -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 closebye#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 完成的的结果文件 ; 即如果你的文件还在生成阶段 , 那么就不能够正常下载