Linux ftp 定时批量下载
使用ftp mget从win服务器批量定时下载前一天的文件,编写脚本文件getfile.sh,代码及说明如下:
将脚本加入crontab定时任务
执行命令:crontab -e
按 i 编辑文件,添加命令如下:
0 0 * * * sh /home/getFile.sh
0 0 * * *
指每天0点0分开始执行该定时任务
sh /home/uploadFile.sh
指执行 home目录下的脚本getFile.sh
按ESC返回命令行模式,再按:wq回车保存并退出。
如果选择nano编辑,^X
退出,Y
确定退出,^T
保存文件,然后选择一个文件名,按ENTER键即可保存后退出。
设置目标服务器ip、账号、密码,时间,根据时间下载文件
定义变量记录ip、账号、密码,获取系统时间
ip=127.0.0.1
u=root
p=123456
T=`date -d -1day +%Y%m%d`
完整脚本代码
#!/bin/bash
u=root #账号
p=123456 #密码
ip=127.0.0.1 #目标服务器ip地址
T=`date -d -1day +%Y%m%d` #获取昨天日期
mkdir /home/root/$T #创建文件夹
ftp -n <<EOF
open $ip
user $u $p
binary
cd /www/file
lcd /home/root/$T
prompt off
mget $T*.txt
close
bye
EOF
脚本代码说明
!/bin/bash 表明该文本的内容为bash SHELL命令 。
T=`date -d -1day +%Y%m%d`
声明变量T,即可使用变量$T,用来记录需要获取文件名中的日期标签。 -1day 表示距系统时间的天数。假如今天是20121123, -2day就表示20121121;
`date –d -2day +%Y-%m-%d %H:%M:%S`的值为:20121121 10:55:44
%Y表示年,如2012,%y也表示年,但是格式为12 #%m表示月,如11 #%d表示日,如23
同样,%H,%M,%S分明表示时分秒, 以系统时间为2012年11月23日10时55分44秒为例 。
ftp -nv 12.2.2.28 <<!EOF
或
ftp -n <<!EOF
open $ip
登录FTP服务器,12.2.2.28表示FTP服务器的IP地址 ,从EOF至代码结束的EOF是FTP命令。 EOF是自己随意给的标示名 。
user $u $p
给出FTP的用户名和密码。此处用户名和密码是:u p。
binary
二进制格式传送 。
cd /www/file
TXT表示数据文件在FTP服务器上的目录。。
lcd /home/root/$T
数据文件要下载到服务器的目录 。
prompt off
该命令忽略FTP交互。
mget $T*.txt
需要下载的文件,$T为前面声明的变量,*表示通配符,表示下载文件名已该日期开头的文件 。
close
关闭ftp链接。
Bye
FTP完成退出 。
EOF
FTP代码结束。