将数组作为参数传递给 mget 命令
pass an array as argument to mget command
我已经将我想从 SFTP 服务器下载的所有文件名存储在一个文件中。此文件存储在我的本地计算机中。
我正在尝试将文件的内容传递给一个数组。
是否可以将此数组作为参数传递给 mget?
类似于 mget $my_array
,其中 my_array
包含文件名列表。
首先要注意mget
是一个lftp command
,所以需要配合lftp
的-c
开关使用。
现在,考虑到该数组包含您可以执行的文件的完整路径
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
我已经将我想从 SFTP 服务器下载的所有文件名存储在一个文件中。此文件存储在我的本地计算机中。
我正在尝试将文件的内容传递给一个数组。
是否可以将此数组作为参数传递给 mget?
类似于 mget $my_array
,其中 my_array
包含文件名列表。
首先要注意mget
是一个lftp command
,所以需要配合lftp
的-c
开关使用。
现在,考虑到该数组包含您可以执行的文件的完整路径
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