Linux中用tar结合SSH管道做远程备份的核心是tar通过“-”将打包压缩数据流直接经SSH加密传输至远端,由远端tar从标准输入解压,全程不生成中间文件,节省磁盘与I/O,确保安全高效。

Linux 中用 tar 结合管道做远程备份,核心是让 tar 不写入本地磁盘,而是把打包压缩后的数据流直接通过 SSH 传到远端,由远端 tar 接收并解压。整个过程不生成中间文件,节省空间、减少 I/O,适合定期备份或大目录传输。
基础原理:tar + ssh 管道直传
本地 tar 打包并压缩(如 -cz),通过管道交给 ssh,ssh 在远程执行 tar -xzf - 解压标准输入流。关键在于两端都用 - 表示从 stdin/stdout 读写,不落地文件。
- 本地不存归档,远程不解压到临时位置,一步到位
- 全程加密传输(SSH 保证)
- 避免本地磁盘满、临时文件残留等问题
常用命令格式与示例
语法结构统一为:tar [选项] [源路径] | ssh 用户@主机 "tar [选项] -C 目标目录"
- 备份本地
/var/www到远程/backup/www:
- 排除临时目录和日志(用
--exclude):
- 加
-v查看进度(本地打包时显示文件名,远程解压不显示):
后台运行与错误捕获
生产环境建议用 nohup 防止终端断开中断任务,并重定向输出便于排查:
- 后台执行,输出记录到
backup.log:
- 完成后检查
backup.log是否有 error 或 warning - 注意:远端目标目录需存在且有写权限;
mkdir -p可提前加在 ssh 命令里确保路径就绪
进阶技巧:带日期命名与压缩控制
如果希望远端归档保留时间戳(而非直接解压),可改用 ssh ... "cat > /path/to/backup_$(date +\%Y%m%d).tar.gz",但这样需额外管理文件生命周期。
- 更推荐的做法:本地生成带日期的流,远端解压后自动清理旧备份(如
find /backup -name "www_*.tar.gz" -mtime +7 -delete) - 传输大文件时启用 SSH 压缩(
-C参数)可降低带宽占用,但 CPU 开销略增:


















