如何利用ftp自动下载文件
Author: Huang W.Y.(melocy@21cn.com)
Date : 2003/05/20
关键词
自动下载
场景
两台主机hosta和hostb。
主机hosta的目录/tmp每日有文件产生。文件名和日期有关,文件格式为abcYYMMDD.txt。
主机hostb利用ftp每日定时(cron)自动登录主机hosta,下载文件abcYYMMDD.txt。保存目录为/BACKUP。
hosta的ftp用户为usera,密码为usera,IP为xxx.xxx.xxx.xxx。
方案
ftp通常用交互方式下载文件。不过别忘了ftp还可以用自动方式下载文件。
在执行ftp –i hosta时,ftp首先在用户HOME目录下查看是否存在..netrc文件。
如果不存在.netrc文件则以交互方式提示用户输入用户名和密码。如果存在.netrc
文件并且有匹配hosta的machine条目,则读取.netrc文件的配置信息自动登录目
标主机。在.netrc文件中可以定义宏模块。
在命令行下可以运行ftp,自动登录目标主机,执行宏模块。命令如下:
echo $ macname arg1 ... |ftp –i hostname
与日期相关的文件,通过宏模块中的参数实现。
实施步骤
.netrc配置文件。
在主机hostb的HOME目录下建.netrc文件,文件属性是属主可读可写,组和其它不可读不可写。
hostb>cat .netrc
#begin of file .netrc
machine xxx.xxx.xxx.xxx login usera password usera
macdef m_get #定义宏模块,宏名自定。
cd /tmp #以 TAB开头。
get abc$1.txt #以 TAB开头。
quit #以 TAB开头。
#空白行
#end of file .netrc
ftp命令行参数
hostb>echo $ m_get `date +%y%m%d`|ftp –i xxx.xxx.xxx.xxx
| |---参数1
|-----宏模块名
至此,你可以在hostb上手工输入以上命令下载hosta上的/tmp/abcYYMMDD.txt文件。
以下是利用cron自动定时ftp下载文件。
自动ftp运行脚本。
注意脚本文件属性是属主可读可执行。
hostb>cat ourftp
#begin of file ourftp
#!/bin/sh
PATH=$PATH; export PATH
BAKDIR=/BACKUP
#format : ourget dir mac machine
ourget() {
[ ! -d $1 ] && mkdir -p $1
cd $1
echo "$ `date +%y%m%d`"|ftp -i $3 #关键语句
}
ourget ${BAKDIR} m_get xxx.xxx.xxx.xxx
#end of ourftp
在crontab中,加入一行:
30 03 * * *