gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:15:29 25 4
gpt4 key购买 nike

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

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

wrong # args: should be "for start test next command" while executing "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

最佳答案

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 来检查上述两个操作。

网络传输协议(protocol)

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

关于Linux - sh 脚本 - 从 FTP 下载多个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30841958/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com