Solaris 中相当于 Cygwin 或 Windows 命令“ftp -s:batch_cmd_file”

Solaris 中相当于 Cygwin 或 Windows 命令“ftp -s:batch_cmd_file”

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。

您可以找到 ncftp这里这里如果尚未安装。

对于 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
    

相关内容