mac用户用scp传大文件常遇中断、无进度、卡99%等问题,应改用rsync实现断点续传,并配合-v、-c、-r、-l等参数提升可观测性、压缩率、目录传输效率及带宽控制。

Mac用户在终端中用scp向远程Linux服务器传大文件时,常遇到传输中断、进度不可见、卡在99%等问题,直接拖拽或图形工具无法解决这些痛点。
确认基础连接条件
先确保远程服务器SSH服务已开启且本地Mac能连通:在终端执行 ssh username@server_ip,能成功登录并看到命令行提示符,说明网络和认证无问题。
如果提示 Connection refused 或超时,请检查服务器是否运行 sshd 服务,并确认防火墙放行了对应端口(默认22,若改过需配合 -P 端口号 使用)。
未配置SSH密钥时,每次传输都会弹密码框;建议提前配好免密登录,避免大文件传到一半卡住输密码。
上传单个大文件(带进度与断点续传)
方法一:用 -v + -C 参数提升可观测性与效率
在终端输入:scp -v -C /path/to/large.zip username@server_ip:/home/username/uploads/
-v 开启详细模式,能看到实时传输速率、剩余时间估算和每阶段握手日志;-C 启用压缩(对文本类大文件如日志、代码包效果明显,但对已压缩文件如ZIP、MP4几乎无效,反而增加CPU开销)。
方法二:用 rsync 替代 scp 实现真·断点续传
执行:rsync -avz --partial --progress /path/to/large.zip username@server_ip:/home/username/uploads/
【--partial 表示允许保留不完整文件】,网络中断后再次运行相同命令会从中断处继续,不是重头来;--progress 显示实时进度条和瞬时速度,比 scp 原生命令直观得多。
上传整个大目录(含千级小文件)
第一步:确认目录路径无空格或特殊字符,否则需用单引号包裹,例如 '/Users/me/Project with space/';否则命令会因分词失败报错 no matches found。
第二步:使用 -r 递归 + -p 保留权限 + -l 软链接不展开
scp -rp -l /path/to/big_folder username@server_ip:/home/username/data/
第三步:若目录内含大量小文件(如 node_modules),强烈建议改用 rsync 并加 -e "ssh -o ConnectTimeout=10" 避免SSH连接闪断导致整批失败。
注意:scp -r 本质是串行发起每个文件的SSH会话,在小文件场景下效率极低,耗时可能是 rsync 的3倍以上。
加速传输的两个关键参数
方法1:启用 SSH 流水线减少连接开销 —— 在 ~/.ssh/config 中添加:
Host myserver HostName server_ip User username ControlMaster auto ControlPersist 600 ControlPath ~/.ssh/sockets/%r@%h:%p
之后所有 scp/rsync 对该主机的操作都复用同一个SSH连接,上传多个文件时延迟骤降。
方法2:限制带宽防占满 —— 加 -l 8000 参数(单位 Kbit/s),即限速约1MB/s:scp -l 8000 large.iso username@server_ip:/tmp/。适合边传文件边视频会议的场景,避免网络卡死。











