批量上传工具选错的人,大多数不是不知道哪个工具好用,是把"批量上传"这四个字理解成了三件完全不同的事:GUI拖拽传500个文件、命令行同步10万个文件到三台服务器、以及程序化对接七种云存储API。工具没有谁比谁好,只有场景配错了比不用还浪费时间
结论 如果你要传500个文件到一台Linux服务器而且传完还要保持原始时间戳和文件权限,第一反应是用FileZilla拖过去,那是错的。正确做法是rsync -avz,一条命令三秒敲完,传完自动校验、自动跳过已存在文件、时间戳权限原样保留。FileZilla的拖拽适合"偶尔传几个文件看一眼",不适合"500个文件有三分之一已经存在、另外三分之一改过、剩下三分之一是新的"这种场景。
一、七款工具按"批量能力"排,各有各的死角
下面这个表不是"哪个最好",而是按你手里的文件数量和目标服务器数量,应该用哪个工具。每一款都标了它真正的死角——这些死角在官方文档里不会写。
| 工具 | 价格 | 平台 | 协议 | 并发 | 断点续传 | 致命死角 |
|---|---|---|---|---|---|---|
| FileZilla | 免费 / Pro $19.99 | Win/Mac/Linux | FTP/SFTP/FTPS | 最多10线程 | ✅ | 无目录同步,不知道哪些文件已经存在哪些是新的,只能"全量覆盖"或"全量跳过"二选一 |
| WinSCP | 免费开源 | 仅Windows | SFTP/FTP/SCP/WebDAV | 单线程队列 | ✅ | 同步功能要手写脚本,GUI目录对比默认按文件名排序,5000个文件"新旧对比"慢到你怀疑人生 |
| Cyberduck | 免费捐赠 / App Store $23.99 | Win/Mac | FTP/SFTP/WebDAV/S3/等 | 可调线程数 | ❌ 不稳定 | 云存储支持最广但大文件断点续传经常失效,S3上传10GB文件中间断了得从头来 |
| Transmit | $45 买断 / $24.99/年 | 仅Mac | FTP/SFTP/S3/WebDAV等 | 可调 | ✅ | 没有定时任务和命令行自动化,只能在Mac上手动操作,不能集成到CI/CD流水线 |
| rclone | 免费开源 | 全平台命令行 | 70+种云存储/SFTP/FTP | --transfers=64 | ✅ | 纯命令行无GUI,配置第一步要oauth认证,新手上手门槛高,不小心写错路径可能覆盖远端数据 |
| rsync | 免费(Linux内置) | Linux/Mac(Windows需WSL) | SSH/rsync daemon | 单线程(增量算法) | ✅ 差分续传 | 单线程导致传输单个大文件时跑不满带宽,不支持云存储(只能服务器到服务器),Windows下不原生支持 |
| scp | 免费(SSH自带) | 全平台 | 仅SCP(基于SSH) | 无 | ❌ | 不支持断点续传,传输中断后必须从头重传,大文件场景下等于自虐 |
rclone最快
--transfers=16 并发传16个文件,配合 --multi-thread-streams=4 单文件4线程分块,百兆带宽能跑到接近满速,比rsync单线程快3-5倍

rsync最稳
增量传输算法只传文件变化的部分,校验和比对保证数据完整,传完的文件和源文件逐字节一致
scp最简单
不需要装任何东西,SSH通了就能用。scp -r /local/dir user@host:/remote/ 一行搞定。但只适合传几个文件或小文件,批量大文件就是在浪费生命
二、五种最常见的批量上传场景,每种都有一个"正确"的工具和一个"你会被坑"的工具
| 场景 | 正确的工具 | 你可能会用的 | 为什么被坑 |
|---|---|---|---|
| 500个文件上传到一台Linux服务器,且部分文件服务器上已经有了 | rsync -avz | FileZilla拖拽 | FileZilla不知道哪些文件已经存在,只能全部覆盖或全部跳过。全部覆盖等于500个文件重新传一遍,浪费时间;全部跳过等于改了的那200个文件根本没上传 |
| 10万个静态资源文件分发到三台CDN源站 | rclone --transfers=32 | WinSCP队列 | WinSCP的队列是单线程顺序执行的,10万个文件排队传到天荒地老。而且三台服务器要手动分别操作三次 |
| 每天凌晨3点自动把网站备份上传到S3和Backblaze B2 | rclone cron | 手动用Cyberduck | Cyberduck没有定时任务和命令行模式,只能人坐在电脑前手动操作,凌晨3点的备份要么雇人值班要么放弃 |
| Mac上把整个项目文件夹传到客户服务器并保持时间戳 | Transmit / rsync | scp -r | scp不保留时间戳和权限,传完以后所有文件的修改时间都变成了上传时刻,权限变成默认值。你之前设置的可执行脚本变成普通文件,服务器上的安全审计也乱套了 |
| Windows环境第一次部署整个网站到虚拟主机 | WinSCP同步 | FTP客户端直接全选上传 | FTP明文传输密码和文件内容,虚拟主机如果没开SFTP只能用FTP,那密码在路上就被抓了。而且FTP被动模式端口范围经常被防火墙拦截,传着传着就卡住了 |
三、批量上传最容易翻车的四个坑,跟网速快慢没关系
翻车1:文件传上去了,打开一看全是0字节
FTP传输过程中网络抖动导致连接断开,客户端以为传完了,服务器端只收到了一个空文件。批量上传300个HTML模板文件,第二天发现其中17个变成了0KB,网站白屏了17个页面。根因是客户端没开启"传输完成后校验文件大小"选项,而且传输队列里看不出哪个文件传失败了。
翻车2:中文文件名全部变成乱码
Windows客户端默认用GBK编码发送文件名,Linux服务器默认用UTF-8接收。一个文件夹里有120个中文命名的产品图片(如"红色连衣裙-正面.jpg"),上传完后全部变成了"绾㈣壊杩炶。瑁?姝i潰.jpg"这种天书。FileZilla和WinSCP都可以在站点管理器里强制设置字符集为UTF-8,但很多人不知道这个设置在哪,直接用默认就传了。
翻车3:时间戳全丢了,服务器上所有文件变成"刚刚修改"
用FTP协议上传的默认行为是把文件的修改时间设为上传那一刻。你本地2023年3月写的代码、2024年6月改的配置文件、2025年1月更新的图片,传到服务器上时间全部变成了"2026年7月29日 14:30"。后续做增量备份时,备份软件一看"所有文件都是今天改的",把整个目录全量备份了一遍,500MB的网站备份膨胀成了重复的全量快照。

翻车4:文件权限全乱,Shell脚本上传后不能执行
本地写好的 deploy.sh 权限是755(可执行),用FTP上传后权限变成644(不可执行)。部署脚本跑不起来,查了半小时才发现是上传工具把权限抹掉了。FTP协议根本不传输Unix权限位,SFTP和rsync可以。如果你服务器上有Shell脚本或需要特定权限的目录,用FTP传上去等于给自己埋了一个定时炸弹。
四、大文件传输专项:超过1GB的文件不是"上传"是"搬运"
单个文件超过1GB时,工具的选择逻辑和批量小文件完全不同。下面这个表专门针对大文件场景。
| 传输方式 | 单文件分块 | 中断后能否续传 | 校验方式 | 10GB文件典型耗时(100Mbps) |
|---|---|---|---|---|
| rclone --multi-thread-streams=8 | ✅ 8线程分块并行 | ✅ | MD5/SHA1哈希 | 约14分钟 |
| rsync --partial | 单线程增量 | ✅ | 滚动校验和 | 约18分钟 |
| scp | ❌ | ❌ | 无 | 约15分钟(但如果99%时断了,重新再来15分钟) |
| FileZilla SFTP | ❌ | ✅ | 无 | 约16分钟 |
关键认知:scp的15分钟和rclone的14分钟看起来差不多,但scp只要中途断一次,之前的14分59秒全部作废。rclone的14分钟包含了"断了也能续传"的安全感。在生产环境里,这个差距不是1分钟,是"传完了"和"又断了,今晚别想睡了"之间的差距。
五、命令行三兄弟:rsync、rclone、scp的精确分界线
这三个命令行工具经常被混在一起讨论,但它们解决的是三个不同维度的问题。
rsync:服务器到服务器的增量同步
核心价值:只传变化的部分
- 适合:两台Linux服务器之间的目录镜像、网站部署、备份同步
- 不适合:上传到云存储(S3/OSS/B2)、Windows环境
- 参数记忆:
rsync -avz --progress /local/ user@host:/remote/ - 关键选项:-a保留权限和时间戳、-z压缩传输、--delete删除远端多余文件
rclone:万能管道,什么都能传
核心价值:70+种存储后端统一接口
- 适合:跨云迁移、混合云备份、定时同步、任何需要对接云存储的场景
- 不适合:你不想学命令行只想拖拽
- 参数记忆:
rclone copy /local/ remote:bucket/ -P --transfers=16 - 关键选项:--transfers并发文件数、--multi-thread-streams单文件分块、--checksum哈希校验
scp:零配置,用完即走
核心价值:不需要装任何东西
- 适合:临时传几个文件到一台SSH能连的服务器
- 不适合:大文件、批量文件、需要断点续传、需要保留权限
- 参数记忆:
scp file.txt user@host:/path/ - 警告:传10个以内小文件可以,超过这个数请用rsync或rclone
六、按预算和规模选
| 预算 | 推荐组合 | 月成本 | 适合什么 |
|---|---|---|---|
| 零预算 | WinSCP + rsync + rclone | $0 | 个人开发者、小团队、自己管几台服务器 |
| $20-50 一次性 | FileZilla Pro / Transmit | $19.99 / $45 | 需要GUI+云存储支持,Mac用户选Transmit,跨平台选FileZilla Pro |
| $0 + 自建 | Nextcloud / Seafile | $0(需要自己的服务器) | 团队协作、多人在不同地点上传下载、需要Web界面和权限管理 |
| 企业级 | rclone + CI/CD流水线 + 自建中转服务 | $0(工具费)+ 运维人力 | 每天TB级数据分发、多地域CDN预热、跨云数据同步 |
七、七种场景速查
| 你想做什么 | 直接用这个 | 核心原因 |
|---|---|---|
| 把改过的文件同步到服务器(不要覆盖没改的) | rsync -avz | 增量算法只传差异部分 |
| Windows上拖拽传文件到Linux服务器 | WinSCP | 免费、双面板、支持SFTP安全传输 |
| 备份网站到Google Drive或OneDrive | rclone | 70+云存储后端,定时任务+cron一条龙 |
| Mac上管理多个FTP/SFTP/S3连接 | Transmit | Mac原生体验最好,一个窗口管理所有连接 |
| 传一个10GB的数据库备份到远程服务器 | rclone --multi-thread-streams=8 | 多线程分块+断点续传,断了自动接上 |
| 临时传3个配置文件到服务器 | scp | 零配置,SSH通了就能用 |
| 团队多人需要上传下载同一批文件 | Nextcloud自建 | Web界面+权限管理+版本历史+分享链接 |
文件传输这件事,最容易被忽略的一点是:上传不是终点,传完了能校验、传错了能发现、传断了能续上,才叫传完了。rsync在传完以后会自动对比源和目标,文件大小不对的重新传;rclone有--checksum选项做哈希校验,确保每一个字节都对。FileZilla和WinSCP的GUI界面看着直观,但它们默认不校验传输结果,你看到的"传输完成"只代表客户端把数据发出去了,不代表服务器收到了完整文件。用命令行工具的一个好处是,它们默认就假设传输可能出错,所以内置了校验逻辑。GUI工具默认假设传输一定成功,所以没做校验。
