当前位置:首页>Linux>Linux 下如何实现文件传输的断点续传 ?

Linux 下如何实现文件传输的断点续传 ?

  • 2026-09-08 01:02:30
Linux 下如何实现文件传输的断点续传 ?

在 Linux 系统下,我经常使用 scp 命令拷贝传输文件,小文件传输中断无所谓,大不了重新传一次,但是如果是大文件使用 scp 命令你拷贝的时候中间中断,那就只能重新传,别无它法。

为什么 scp 不支持断点续传?

因为 SCP(Secure Copy Protocol)是基于 SSH 实现文件传输,协议本身不支持断点续传机制,所以一旦传输中断,只能从头开始。对于大文件传输或是网络不稳定时候,建议慎用!

Linux下如何实现文件传输的断点续传?

这里我推荐使用以下三种方案,任何移动都可以轻松达到在 Linux 下文件传输断点续传的目的。

方案一:使用 rsync (推荐)

rsync 是 Linux 下最强大的文件同步工具,支持断点续传,且能通过 SSH 隧道传输,可完全替代 SCP。

用法:

# 本地到远程(替代 scp localfile user@remote:/path)rsync -avz --progress localfile user@remote:/path/# 远程到本地(替代 scp user@remote:/path/remotefile ./)rsync -avz --progress user@remote:/path/remotefile ./

参数说明:

参数
作用
-a
归档模式,保留权限、时间戳、符号链接等
-v
详细输出,显示传输过程
-z
传输时压缩,节省带宽
-P
等价于 --partial --progress,*断点续传核心参数*
--partial
保留部分传输的文件,支持续传
--progress
显示传输进度

示例:

# 传输大文件时网络中断,重新执行相同命令即可续传rsync -avzP linux-file.tar.gz user@server:/data/# 限制带宽(避免占用全部网络)rsync -avzP --bwlimit=1000 large.iso user@server:/data/# --bwlimit=1000 表示限制为 1000KB/s目录同步与增量备份# 同步整个目录,自动跳过已存在的文件rsync -avzP /local/files/ user@server:/remote/files/# 注意:末尾的斜杠很重要!# /local/files/  → 同步目录内容# /local/files   → 同步目录本身# 删除远程端本地已不存在的文件(严格镜像)rsync -avzP --delete /local/files/ user@server:/remote/files/
方案二:使用 sftp 命令行工具

OpenSSH 自带的 sftp 命令行工具支持交互式和批处理模式,具备断点续传能力。

用法:

# 连接远程服务器sftp user@remote-server# 在 sftp 提示符下使用sftp> reget remote-file local-file    # 续传下载(remote → local)sftp> reput local-file remote-file    # 续传上传(local → remote)sftp> !ls                             # 执行本地命令sftp> bye                             # 退出

脚本

#!/bin/bash# sftp-resume.sh - SFTP 断点续传脚本HOST="server.example.com"USER="backup"LOCAL_FILE="/data/archive.tar.gz"REMOTE_FILE="/backups/archive.tar.gz"# 使用 Here Document 执行批处理命令sftp -o BatchMode=no -b - $USER@$HOST << EOFreput $LOCAL_FILE $REMOTE_FILEbyeEOF

示例:

# 指定端口和非默认密钥sftp -P 2222 -i ~/.ssh/custom_key user@host# 恢复被中断的下载(reget = resume get)sftp> reget /remote/large-file.zip ./large-file.zip
方案三:使用 lftp 工具

lftp 是功能强大的文件传输客户端,支持多协议(SFTP、FTP、HTTP 等),内置断点续传和镜像功能。

安装:

# Debian/Ubuntusudo apt install lftp# RHEL/CentOSsudo yum install lftp

用法:

# 连接并传输lftp sftp://user@remote-server -e "set sftp:auto-confirm yes; put -c local-file -o remote-file; bye"# 参数说明:# -c  = 断点续传(continue)# -o  = 指定远程路径

交互式会话

lftp sftp://user@remote-server# 在 lftp 提示符下lftp> set sftp:auto-confirm yes    # 自动接受主机密钥lftp> put -c bigfile.iso           # 上传并支持续传lftp> get -c remote-file.zip       # 下载并支持续传lftp> mirror -c local-dir remote-dir  # 镜像同步并续传lftp> bye

高级:自动重试和镜像

# 自动重试 5 次,断线后等待 10 秒重连lftp -u user,pass sftp://server -e "set net:max-retries 5;set net:reconnect-interval-base 10;set net:timeout 30;mirror -c --parallel=3 /local/data /remote/backup;bye"

方案对比

工具
协议
断点续传
适用场景
学习曲线
rsync
SSH/Rsync
✅ 完美支持
大文件、目录同步、日常备份
低
sftp
SFTP
✅ 支持
简单文件传输、交互式操作
极低
lftp
SFTP/FTP/HTTP
✅ 完美支持
复杂传输任务、自动化脚本
中
scp
SCP
❌ 不支持
小文件、一次性传输
极低

实战:大文件传输完整方案

假设数据库备份场景,需要传输 100GB 的数据库备份:

#!/bin/bash# large-file-transfer.sh - 安全的大文件传输脚本FILE="db-backup-$(date +%Y%m%d).sql.gz"SOURCE="/backup/$FILE"DEST="backup-server:/data/backups/"LOG="/var/log/transfer.log"# 使用 rsync 的断点续传 + 校验rsync -avzP --checksum \    --partial-dir=.rsync-partial \    --timeout=300 \    --contimeout=60 \    -e "ssh -o ServerAliveInterval=60 -o ServerAliveCountMax=3" \    "$SOURCE" "$DEST" 2>&1 | tee -a "$LOG"# 检查传输结果if [ $? -eq 0 ]; then    echo "[$(date)] 传输成功: $FILE" >> "$LOG"    # 可选:删除本地文件或发送通知else    echo "[$(date)] 传输失败或中断: $FILE" >> "$LOG"    echo "执行相同命令即可续传"fi

参数说明:

--checksum:校验文件完整性,避免续传时数据损坏

--partial-dir:将部分文件存放在隐藏目录,保持目标目录整洁

--timeout:数据传输超时时间(秒)

--contimeout:连接超时时间

-e "ssh ...":传递 SSH 参数,保持连接活跃

写在最后

在 Linux 系统,特别是服务器环境中,非常不建议使用 scp 进行大文件传输。不论是使用 rsync、 sftp 、 lftp 任何一种工具都支持断点续传,他们才是最好的选择,Linux 下大文件实现断点续传的利器。

欢迎关注我,带你解锁更多 Linux 相关技能!

------ 往期推荐 ------
Ubuntu 关掉 Snap,提速、美化指导说明。
Ubuntu 24.04 安装 Fcitx5 + Rime + 雾凇 / 万象拼音简明教程
macOS 好用,还是 Linux 好用?
用 Linux ,做它擅长的事。
普通员工在公司使用Linux吗?
中国用 Linux 的人其实一点也不少!
我不用微软 Office 好多年!

-END-

关注我的公众号,看文不迷路👇👇👇

最新文章

随机文章