核心是tar -cf -将目录打包输出到标准输出,通过管道经ssh传输,远程用cat >直接保存为.tar文件;加gzip可实现边打包边压缩边传输,全程无本地临时文件。

核心就是用 tar 输出到标准输出(-),再通过管道交给 ssh 远程执行接收命令,全程不生成本地临时文件。
关键写法:tar -cf - + ssh 远程 cat
必须用 -f - 显式指定 tar 输出到 stdout,这是流式传输的前提。远程端用 cat > 文件名 直接把收到的数据写入目标路径。
-
tar -cf - /data/app:打包 /data/app,输出到终端(即 stdout) -
| ssh user@192.168.1.100 "cat > /backup/app-$(date +%Y%m%d).tar":管道传过去,远程直接存为 tar 文件 - 完整命令示例:
tar -cf - /data/app | ssh backup@192.168.1.100 "cat > /backup/app-full.tar"
带压缩的流式传输:加 gzip 再 pipe
如果要边打包、边压缩、边发走,gzip 必须放在 tar 和 ssh 之间,且不能写本地文件。
tar -cf - /var/log | gzip -1 | ssh user@host "cat > /backup/logs-$(date +%Y%m%d).tar.gz"-
-1压缩级别最快,适合大目录;-6更平衡,日常推荐;避免用-9,耗时翻倍但体积只小一点点 - 远程不需要提前解压或特殊处理,收到的就是标准 .tar.gz 文件
推过去直接解压:省掉中间存档步骤
如果目标机器空间紧张,或者只想同步内容不保留归档包,可以边传边解。
- 命令结构:
tar -cf - /src/dir | ssh user@host "cd /dst && tar -xf -" - 注意括号不是必须,但
cd /dst && tar -xf -要保证路径切换成功再解压 - 如需保留权限和所有者,加
-p:tar -cfp - /src/dir | ssh user@host "cd /dst && tar -xfp -"
反向拉取:从远程打包传回本地
本地不执行 tar,而是让远程 tar,stdout 流式传回本地保存。
ssh user@192.168.1.100 "tar -cf - /etc/nginx" > nginx-config.tar- 带压缩:
ssh user@host "tar -cf - /var/log | gzip -1" > logs.tar.gz - 传回后可直接用
tar -xvf nginx-config.tar解压,无需额外处理











