Linux - sh脚本 - 从FTP下载多个文件

时间:2015-06-15 09:41:11

标签: linux ftp sh

我需要可以通过我的sh代码从ftp下载文件的脚本

我使用了expect和ftp,但是如果我在代码中使用循环,我得到了

  

错误#args:应该是“for start test next command”       同时执行“for v in”a b c“”

我的代码

/usr/bin/expect << EXCEPT_SCRIPT
set timeout 1
spawn ftp -n ${HOST}
send "user ${USER} ${PASSWD}\n" 
expect "ftp>"
send "bin\n"
expect "ftp>"
send "dir\n"

for v in "${files_to_download[@]}"
do
  ftp_file="${v}.bz2"

  #download file
  echo ${ftp_file}  

  #put code to dl here

done 

 expect "ftp>"
 send "bye\n"
EXCEPT_SCRIPT

1 个答案:

答案 0 :(得分:2)

wget的

expect可能很难处理,因此我更倾向于使用GNU Wget作为替代方案。只要您在任何参数中没有任何空格,以下内容就可以正常工作。

for v in "${files_to_download[@]}"
do
  ftp_file="${v}.bz2"
  wget --user=${USER} --password=${PASSWD} ${HOST}/${ftp_file}
done

仅使用一个FTP连接请求多个资源

如果这是一个问题,您可以避免使用 FTP globbing (通配符)与服务器建立多个FTP连接,例如

wget --user=${USER} --password=${PASSWD} "${HOST}/*.bz2"

确保引用了URL,因此shell不会展开通配符。 您还可以使用-nc, --no-clobber选项来避免重新下载已下载的文件。

另一方面,请求多个资源(wget url2 url2 ... 会导致多个FTP登录。

注意:我通过使用tcpdump在我自己的FTP服务器上监控端口21来检查上述两个操作。

的ncftp

您可能也对ncftp感兴趣。虽然我多年没有使用它,但我发现它 - 以及它的ncftpgetncftpput实用程序 - 比标准的UNIX ftp程序更容易用于命令行脚本。