0

我已将要从 SFTP 服务器下载的所有文件名存储在一个文件中。该文件存储在我的本地计算机中。

我正在尝试将文件的内容传递给数组。

是否可以将此数组作为参数传递给mget?

mget $my_arraywheremy_array有文件名列表的东西。

4

1 回答 1

1

首先要记住的mget是一个lftp command,所以它需要和-c开关一起使用lftp

现在,考虑到该数组包含您可以执行的文件的完整路径

lftp -c mget "${array[@]}"

作为匿名用户获取这些文件。

例子

array=( "ftp://ftp.redhat.com/redhat/brms/5.3.1/SHA256SUM" "ftp://ftp.redhat.com/redhat/brms/5.3.1/brms-p-5.3.1.GA-src.zip" )
lftp -c mget "${array[@]}"

会为您获取两个有问题的文件。


为什么要双引号 ${array[@]}

当扩展发生在双引号内时,每个参数都会扩展为一个单独的单词,因此您可以解决其中包含空格的文件名的分词问题(尽管很少见)。


编辑(请记住,这不是在lftp会话中,而是bash在本地主机上的会话)

假设您只有 bash 数组中的文件名,如下所示

array=( "SHA256SUM" "brms-p-5.3.1.GA-src.zip" )

首先做:

array=( "${array[@]/#/ftp://ftp.redhat.com/redhat/brms/5.3.1/}" )
# We have just added the ftp server name + path before every file name in array
lftp -c mget "${array[@]}" # Download the files just like that
于 2016-09-01T13:30:28.480 回答