用户登录
个人主页 用户中心 我的订单 添加授权 管理授权
退出登录
用户登录 用户注册
欢迎来到 UC建站系统

FTP批量下载:FileZilla拖三小时,lftp 22分钟跑完120G

FTP批量下载这件事,选对工具比带宽更重要。这篇文章从四个维度把工具排清楚:图形界面工具、命令行工具、全自动脚本方案、极速下载器,每种场景给具体配置和实测对比。
工具类型平台批量下载核心能力适合场景
lftp命令行Linux / macOS / Windows(WSL)mirror镜像同步、pget多线程、队列管理、断点续传服务器端大批量下载,最佳选择
aria2命令行全平台多线程分段下载,一个文件拆成N段并行拉少量大文件极速下载
wget命令行全平台递归下载、通配符匹配、断点续传简单递归下载,不追求极致速度
FileZilla图形界面Windows / macOS / Linux拖拽式、站点管理器、队列、断点续传偶尔手动下载,非大批量场景
WinSCP图形界面+脚本Windows同步目录、脚本自动化、定时任务Windows环境需要GUI+脚本双模式
Shell脚本+crontab自动化脚本Linux全自动定时下载,零人工干预每日/每周定期从FTP拉数据

一、lftp:命令行批量下载的天花板

如果只推荐一个FTP批量下载工具,就是lftp。它支持FTP、FTPS、SFTP、HTTP多种协议,核心优势是mirror镜像模式和pget多线程下载。

场景一:整个目录镜像下载(最常用)

把远程FTP上整个 /backup/2026/ 目录同步到本地,只下载本地没有的文件(增量下载):

lftp -u username,password ftp.example.com -e "mirror --verbose --parallel=5 /backup/2026/ /local/backup/2026/; quit"

--parallel=5 表示同时开5个文件并发下载。mirror默认就是增量模式,只下载远程有但本地没有、或者远程更新的文件。第一次跑是全量下载,之后每次只拉增量,效率极高。

场景二:按规则过滤,只下载特定类型文件

只要.sql和.tar.gz文件,不要其他:

lftp -u user,pass ftp.example.com -e "mirror --include='.*\.sql$' --include='.*\.tar\.gz$' --exclude='.*' --parallel=5 /remote/ /local/; quit"

1 - FTP批量下载:FileZilla拖三小时,lftp 22分钟跑完120G - UC建站系统

--include 和 --exclude 支持正则表达式。还有 --only-newer 只下载比本地新的文件,--delete 删除本地多余文件(和远程完全同步),--ignore-time 不比较时间直接全量覆盖。

场景三:大文件分段下载(单文件加速)

一个50G的数据库备份文件,单线程下载可能被FTP服务器限速。lftp的pget命令把一个文件切成N段同时下载:

lftp -u user,pass ftp.example.com -e "pget -n 10 /backup/db_dump.sql.gz -o /local/db_dump.sql.gz; quit"

-n 10 表示分成10段同时下载,对HTTP/FTP服务器限速有奇效。但注意有些FTP服务器不支持断点续传(REST命令),pget会失效。

lftp容易踩的坑:密码直接写命令行会被ps aux看到,生产环境建议把密码写到~/.lftprc配置文件里(权限设为600),或者用lftp -e "set ftp:passive-mode on" 加交互式登录。另外mirror时如果远程目录有几百万个小文件,建议把 --parallel 调到3-5而不是10,因为并发太高FTP服务器可能触发连接数限制导致封IP。

二、aria2:单文件极速下载,但不适合海量小文件

aria2的强项是把一个大文件切成N段,从同一个FTP服务器并行下载不同片段。一个10G的ISO镜像,aria2开16个线程能跑满千兆带宽。

下载单个大文件

aria2c -x 16 -s 16 --ftp-user=username --ftp-passwd=password ftp://ftp.example.com/bigfile.iso

-x 16 是最大连接数,-s 16 是分段数。分段越多单文件越快,但连接数太多可能被服务器限流。一般设8-16就够了。

批量下载多个文件

把所有FTP文件URL写到一个文本文件里,一行一个:

aria2c -i urls.txt -j 5 --ftp-user=user --ftp-passwd=pass

-j 5 表示同时下载5个文件。但aria2不像lftp那样支持递归目录和通配符匹配,你需要先自己把FTP目录里的文件列表导出成URL清单。所以aria2适合"已知具体文件列表"的批量下载,不适合"把整个目录拉下来"的场景。

三、wget:简单粗暴的递归下载

wget最大的优势是几乎所有Linux发行版都预装了,不需要额外安装任何东西。

递归下载整个FTP目录:

wget -r -np -nH --cut-dirs=2 --ftp-user=username --ftp-password=password ftp://ftp.example.com/backup/2026/

-r 递归下载,-np 不回溯父目录,-nH 不创建主机名目录,--cut-dirs=2 跳过前两级目录。断点续传加 -c 参数,只下载比本地新的加 -N 参数。

wget的局限在于它是单线程的,文件再多也是一个一个下。而且递归下载时如果目录层级很深,wget会先生成完整的文件列表再开始下载,目录特别大时内存占用会很高。海量小文件场景下wget比lftp慢3-5倍,大文件场景下比aria2慢5-10倍。但在"需要快速验证某个FTP能连上、能下载"这种临时场景,wget最方便。

2 - FTP批量下载:FileZilla拖三小时,lftp 22分钟跑完120G - UC建站系统

四、图形界面工具:FileZilla和WinSCP能批量下载到什么程度

FileZilla:日常手动操作首选,批量下载有上限

FileZilla的批量下载就是"Ctrl+A全选目录里的文件,拖到本地窗口"。它能断点续传、能管理队列、能限速,但并发线程数最多10个(设置→传输→并发传输数),而且不支持正则过滤。对于几百个文件的手动下载够用,但几千几万个文件的自动化批量下载,FileZilla会频繁断开重连、丢队列、占满内存。

WinSCP:Windows平台最好的图形+脚本双模式

WinSCP的优势在于它既能当图形界面用,又能生成脚本文件给命令行跑。在WinSCP里配置好连接,选"会话→生成会话URL/代码→脚本文件",就得到一个.winscp脚本。然后用命令行调用:

winscp.com /script=download_script.txt /log=download.log

脚本里写synchronize remote和本地路径,就能做目录同步。配合Windows任务计划程序,可以实现定时自动下载。适合Windows服务器上需要无人值守批量下载的场景。

五、全自动方案:定时任务+脚本,零人工干预

这才是FTP批量下载的终极形态——不需要人每天手动去点下载,系统自己定时跑。

Linux方案:lftp脚本 + crontab

第一步,创建一个Shell脚本 /opt/scripts/ftp_sync.sh:

#!/bin/bash
LOG_FILE="/var/log/ftp_sync.log"
echo "$(date): Starting FTP sync" >> $LOG_FILE
lftp -u $FTP_USER,$FTP_PASS $FTP_HOST << EOF
set ftp:ssl-allow yes
set mirror:use-pget-n 5
mirror --verbose --parallel=5 --only-newer /remote/backup/ /local/backup/
quit
EOF
echo "$(date): FTP sync completed" >> $LOG_FILE

第二步,crontab -e 添加定时任务,每天凌晨3点执行:

0 3 * * * /opt/scripts/ftp_sync.sh >> /var/log/ftp_cron.log 2>&1

用户名密码不要硬编码在脚本里,通过环境变量或 .netrc 文件(权限600)传入。

Windows方案:WinSCP脚本 + 任务计划程序

在WinSCP里图形化配置好连接和目标目录,导出为download.txt脚本文件。然后打开Windows任务计划程序→创建任务→触发器设为每天→操作设为启动程序,程序填winscp.com的完整路径,参数填 /script="C:\scripts\download.txt" /log="C:\logs\ftp.log"。注意WinSCP的脚本默认在当前用户下运行,如果FTP凭据涉及敏感信息,建议用专门的系统服务账户。

六、五种常见下载场景的最佳工具组合

场景推荐工具关键参数预计速度
每天自动从FTP拉数据库备份lftp mirror + crontab--parallel=5 --only-newer增量模式几秒到几分钟
一次性的整站文件迁移(几万文件)lftp mirror--parallel=8 --use-pget-n=3千兆带宽能跑满60-80%
下载几个超大文件(10G以上)aria2-x 16 -s 16千兆带宽能跑满90%+
只下载特定类型文件(如只下载.log)lftp mirror + include/exclude--include='.*\.log$' --exclude='.*'取决于匹配文件数量
Windows上临时手动下载几十个文件FileZilla 或 WinSCP设置→并发传输数=10够用但不极致

七、下载速度慢的四个真正原因

工具选对了还是慢,问题大概率不在工具本身:

FTP被动模式(PASV)没开

防火墙/安全组只放了21端口,没放被动模式的数据端口范围。连接能建立但传输数据时卡住。lftp里加 set ftp:passive-mode on,服务端防火墙要放行被动模式端口范围(如30000-31000)。

FTP服务器端做了连接数限制

很多FTP服务(vsftpd、Pure-FTPd)默认限制单IP并发连接数。你把parallel开到20,服务器只接受3个,剩下的排队。vsftpd里检查 max_per_ip 参数,Pure-FTPd检查 --maxclientsperip 参数。或者跟服务器管理员协商提高限制。

海量小文件比少量大文件慢几十倍

下载一个100G的大文件,传输速度能跑到800Mbps。下载100万个100KB的小文件,实际有效传输速度可能只有50Mbps。因为每个小文件都要走一遍TCP握手+FTP命令交互(RETR→数据传输→断开),真正传输数据的时间占比极低。lftp的mirror并发多个文件可以缓解这个问题,但无法根治。如果文件实在太小太多,建议先在FTP服务器上打包成tar.gz再下载。

中间链路的问题:跨运营商、跨国、丢包

FTP服务器在国外,你在国内下载,延迟200ms+,TCP窗口增长慢,单线程速度就是上不去。解决办法:多线程(aria2分段或lftp pget)对抗高延迟;或者在国内找一台中转服务器,先lftp把文件拉到中转机,再从国内下载(中转机的国内带宽通常比跨境带宽大得多)。


FTP批量下载这件事,工具链条只有三步:能连上 → 能筛选 → 能自动化。第一步用lftp/WinSCP搞定连接和协议兼容,第二步用mirror的include/exclude或正则表达式搞定筛选,第三步用crontab或任务计划程序搞定无人值守。很多人卡在第一步和第二步之间——连上了、下载了,但每次都是全量下载,浪费时间和带宽。增量下载(mirror的--only-newer模式)是FTP批量下载里ROI最高的优化,一行参数的区别,日常下载量可能从几十G降到几十M。如果每天都要从FTP拉数据,先把增量配置好,再考虑要不要换工具。

相关推荐
在线客服
👇找客服拿折扣
QQ咨询&售后
在线时间
11:00 ~ 5:30
QQ:3155555535
👇联系QQ
👇联系WX
首页 程序 帮助 登录