Cygwin
我正在使用在和下运行的 FTP 脚本Windows cmd
,该脚本使用 ftp 的-s
命令行开关从批处理文件中读取和执行命令:
ftp -i -s:/path/ftp.params
该批处理文件ftp.param
由另一个作业生成,包含标准 FTP 命令,例如:
OPEN my_address
my_login
my_password
GET file_a
GET file_b
BYE
现在我必须在 Solaris 下使用这个 ftp 脚本,但是根据它的ftp 手册页,的Solaris版本ftp
不接受使用命令行开关-s
来执行批处理文件。
我搜索过该文档,也搜索过网络,但没有找到解决方法。您有什么建议吗?
答案1
该选项似乎仅适用于 Windows FTP 客户端。要获得类似的结果,您可以安装一个可以编写脚本的 FTP 客户端。NcFTP 对此非常友好。Wget 也可以使用。
使用 ncftp,如果您不想每次都输入登录凭据,则可以获得一个包含“获取”列表的文件和一个包含登录凭据的文件。(请注意所涉及的安全风险)
从使用 bash 的命令行,您可以将以下内容输入脚本或直接运行:
while read line
do
ncftpget -f <FILEWITHCREDENTIALS> $line -bb
done < <FILEWITHLIST>
ncftpbatch -d
您的凭证文件将采用以下格式
host <my_address>
user <my_login>
pass <my_password>
-bb 将每个文件作为等待运行的批处理作业提交。调用 ncftpbatch 将运行该作业。这样做应该将其限制为一个连接。
其他选项包括 -b(立即在后台启动该作业)和删除 ncftpbatch 调用,并在命令中使用用户/主机/密码选项而不是 -f。
对于 wget,您可以使用类似的循环脚本,并将 ncftpget 调用替换为
wget ftp://user:[email protected]/path/$line
再次,如果尚未安装,你可以获取 wget这里或者使用任一程序查找适合您的 Solaris 版本的包管理器。
您可以通过手册页或快速网络搜索找到有关该程序的更多信息。
答案2
好的,我找到了一个可行的解决方案。
基本上,我必须从命令中打开远程 ftp 站点,然后ftp
使用 shell 来输入ftp
批处理文件,而不是从批处理文件中打开它。由于我总是使用相同的 ftp 地址,所以我可以忍受它。
唯一真正的缺点是,这需要稍微修改一下批处理文件,因此生成它的作业。
shell 部分包括
ftp
按以下方式执行命令:ftp -i -n my_address < /path/ftp.params
并且批处理文件应该这样修改:
USER my_login my_password GET file_a GET file_b BYE