【问题标题】:Linux - sh script - download multiple files from FTPLinux - sh 脚本 - 从 FTP 下载多个文件
【发布时间】:2015-06-15 09:41:11
【问题描述】:

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

我已经将expect 与 ftp 一起使用,但如果我在代码中使用 for 循环,我得到了

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

我的代码

/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

【问题讨论】:

    标签: linux ftp sh


    【解决方案1】:

    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 通配符(通配符)与服务器建立多个 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 程序更容易用于命令行脚本。

    【讨论】:

    • 但是我会为我下载的每个文件连接/断开连接。我担心 ftp 提供商不会对此感到满意。
    • @MartinPerry 作为服务器管理员,我不认为这会是个问题,但在使用 wget 进行了一些实验后,我更新了我的答案。
    猜你喜欢
    • 2011-12-04
    • 2011-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-10
    相关资源
    最近更新 更多