自动化FTP过程

什么是自动执行ftp过程的最佳方式。 我的意思是可以编写一个脚本,当执行的脚本将ftp到远程系统和取出文件与人为干预。

请build议。

我个人使用lftp ,这是高度可编写脚本(请参阅本教程 )。

当然,你也可以使用perl / ruby​​ / python /你的首选脚本语言编写一个改编的FTP客户端。

有用于此目的的Perl包。 例如CPAN模块Net :: Lite :: FTP和Net :: FTP 。

它将允许您的脚本根据来自服务器的信息做出决定。 例如,如果文件名不是常量(可能包含date或版本号),则脚本可以在决定要下载哪个文件之前处理目录列表。

我成功地使用它来自动下载/更新大分子序列数据库。

我想你可以使用wget来做这样的事情:

WGET是免费的,所以你可以抓住并检查帮助文件

就像是:

wget -user=username -pass=password ftp://ftp.moose.com/download.zip 

显然可以在脚本中使用variables

只是注意到这是solaris,所以不知道这是否工作。

我喜欢蜷曲最好的:

curl是一个使用URL语法传输文件的命令行工具,支持FTP,FTPS,HTTP,HTTPS,SCP,SFTP,TFTP,TELNET,DICT,LDAP,LDAPS和FILE。 curl支持SSL证书,HTTP POST,HTTP PUT,FTP上传,基于HTTP表单的上传,代理服务器,cookies,用户名密码authentication(Basic,Digest,NTLM,Negotiate,Kerberos …),文件传输恢复,代理隧道和大巴其他有用的技巧。

非常方便所有您的URL获取需求。

可以使用netrc(4)文件自动执行Solaris ftp命令。 macdef init是关键。 样品:

猫〜/ .netrc
机器remote-host1.domain.comloginmy-ftp-account
密码password4host1
macdef init
光盘
/ pub / DOWNLOAD获取自述文件

默认login匿名密码[email protected]

笔记:

  1. initmacros定义之后的两个空行是重要的,
  2. 这也自动到远程主机1的交互式ftp会话。

你的脚本可以在调用ftp之前创buildnetrc文件。

你已经得到了很多build议,使用不同于FTP的东西。 这很公平,因为脚本FTP有点烦人,但它不一定是便携式的,也不是教你什么新东西。

实际上,通过将命令从STDIN引导到ftp来执行脚本非常简单。 这种东西适用于多种工具。

 cd /target ftp -n host <<EOF USER falken PASS joshua cd place binary get file bye EOF echo 'hi! um... what'\''s this all about again? I am done.' 

login部分可以通过向脚本所有者的~/.netrc文件添加信息来实现自动化。 实际上,如果你是man netrc你会学到很多关于自动化ftp

在Solaris上,您还可以使用期望的自动化工具。 当然你应该先安装它。 对于FTP,您可以在维基百科有关Expect的文章中find示例。

我已经为我们的需要写了一个,

#!/bin/sh

主机名= “IP-ADRESS”

端口= “21”

用户名= “serverfault”

密码= “serverfalut”

storage_path = “目的地”

current_date =“$(date +%Y%m%d)”

$参数】remotefile = “REMOTE-FILE”

ftp -in $ hostname $ port << EOF

引用用户$用户名

报价传递$密码

二进制

得到$ remotefile $ storage_path /

删除$ output_dir / output $ current_date.tar.gz

放弃

EOF

退出0

ncftp通常包含ncftpget和ncftpput,它们将适合包含在脚本中。 通常可以从源码构build,或者检查csw或sunfreeware。

我通常只是使用ftp和authentication文件.netrc,然后把所有东西都放进去。 例如

 cat >> EOF | ftp open ftpserver mget * bye EOF 

NcFTP客户端