下载文件的 wget 替代方案

下载文件的 wget 替代方案

我需要从客户端的 FTP 下载 10,000 个 zip 文件,其中大约有 40,000 个项目。我考虑过这样做:

$ cat > files.txt
file1
file2
file3
file4

$ wget -i files.txt

万一我超时了,有没有更好的解决方案来处理这么大的问题?

答案1

该解决方案很好并且非常可靠:使用适当的选项,wget将重试并下载任何传输中断的文件。

但是,您也可以编写大多数命令行 FTP 客户端脚本(例如 BSD ftp 客户端)。但wget更好的是,您可以将其配置为不下载您已有的文件,这使得同步非常方便。

wget支持(至少在 Linux 上)速率限制,并且可以很容易地将文件列表分发到多个文件之间以便并行下载,或者您可以使用GNU并行

答案2

wget很好,很称职,而且正如 Iserni 的回答所说,如果您深入研究手册以查找可用选项,在这种情况下可能会很好地工作。我只会陈述一些替代方案。

我用低速FTP用于通过 FTP 和 SFTP 进行传输和同步。它有一个内部排队系统,非常适合我的用例,支持镜像、反向镜像、FXP、所有常规 FTP 功能等(现在甚至支持 Bittorrent)。

在这种情况下,只需使用脚本和就足够简单了wget,但我想提一下一个可以大大简化 FTP 传输的程序。

我也用过FTP服务器它有一个非常好的批处理系统,但对我来说,LFTP 最大的优势在于它同时支持 FTP 和 SFTP。

另一种选择是rsync它还支持 FTP,也许您已经习惯了。它还提供了相当高级的选项,例如过滤和恢复中断的下载。

与批量使用相比,“真正的”FTP 客户端的一个优点wget是可以重复使用与服务器的单个连接,这可能会提高性能。我不确定是否有这样的替代方案wget,但也许有。如果这是真正的一次性操作,您可能可以使用或多或少任何东西。

答案3

lftp 在这方面表现不错。注意继续扩展通配符选择。

lftp :~> 帮助镜像
用法:镜像 [OPTS] [远程 [本地]]
镜像指定远程目录到本地目录

-c, --continue 如果可能的话继续镜像作业 -e, --delete 删除远程站点不存在的文件 --delete-first 在传输新文件之前删除旧文件 -s, --allow-suid 根据远程站点设置 suid/sgid 位 --allow-chown 尝试设置文件的所有者和组 --ignore-time 在决定是否下载时忽略时间 -n, --only-newer 仅下载较新的文件(-c 不起作用) -r, --no-recursion 不进入子目录 -p, --no-perms 不设置文件权限 --no-umask 不对文件模式应用 umask -R, --reverse 反向镜像(放置文件) -L, --dereference 将符号链接下载为文件 -N, --newer-than=SPEC 仅下载比指定时间更新的文件 -P, --parallel[=N] 并行下载 N 个文件 -i RX, --include RX 包含匹配的文件 -x RX, --exclude RX 排除匹配的文件 RX 是扩展正则表达式 -v, --verbose[=N] 详细操作 --log=FILE 将正在执行的 lftp 命令写入文件 --script=FILE 将 lftp 命令写入 FILE,但不执行它们 --just-print, --dry-run 与 --script=- 相同

当使用 -R 时,第一个目录是本地的,第二个目录是远程的。 如果省略第二个目录,则使用第一个目录的基本名称。 如果省略两个目录,则使用当前本地和远程目录。

lftp:~> 帮助 mget
用法:mget [OPTS]
使用扩展通配符获取选定的文件
 -c 继续,重新获取
 -d 创建与文件名相同的目录并获取
     文件放入其中而不是当前目录中
 -E 传输成功后删除远程文件
 -a 使用 ascii 模式(默认为二进制)
 -O 指定放置文件的基本目录或 URL

相关内容