linux中tar结合管道跨服务器迁移的核心思路是通过“-”标识标准输入/输出,用管道将打包、压缩、传输、解压串联为无落地数据流;推荐使用tar+ssh方式,复用加密通道,支持权限保留(-p)、自动建目录(mkdir -p)与指定解压路径(-c)。

Linux 中用 tar 结合管道实现跨服务器迁移,核心思路是不落地、不生成中间文件,直接将打包、压缩、传输、解压串成一条数据流。这种方式高效、节省磁盘空间,特别适合中大型目录或频繁同步场景。
关键原理
tar 通过 -(短横线)表示标准输入/输出,配合管道 | 可把打包结果直接传给网络工具(如 ssh、nc),接收端再用 tar -x 从标准输入解包,全程无临时文件。
推荐方式:tar + ssh(最安全、最常用)
无需额外端口开放,复用 SSH 加密通道,支持身份认证和权限控制,生产环境首选。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 发送端执行(本地打包并推送到远程):
tar -czf - /path/to/dir | ssh user@remote_ip "mkdir -p /target && tar -xzf - -C /target" - 接收端无需预启动服务,命令在远程 shell 中即时执行
- 若需保留权限和时间戳,加
-p参数:tar -czpf - /path/to/dir | ssh ... - 如目标路径不存在,
mkdir -p确保自动创建;-C指定解压根目录,避免污染当前路径
备选方式:tar + nc(Netcat,适合内网高速直连)
适用于信任网络、追求极致速度的场景,但需手动管理端口和防火墙。
- 接收端监听(目标服务器):
nc -l -p 9876 | tar -xzf - -C /target - 发送端推送(源服务器):
tar -czf - /path/to/dir | nc remote_ip 9876 - 注意:
-l表示监听,-p指定端口;两端 tar 压缩参数(-z)必须一致 - 端口被占用时可换用 5001、8080 等未被占用端口
中文文件名迁移注意事项
跨平台或不同 locale 的服务器间迁移,中文名易乱码。关键不是“能不能”,而是“怎么声明编码”:
- Linux → Linux 迁移(双方 UTF-8):默认即可,无需额外参数
- Linux → 旧版 Windows 或 GBK 环境:发送端显式指定编码:
tar --format=gnu --encoding=UTF-8 -czf - /dir | ssh ... - 已乱码的接收端补救:用
convmv修复(如误按 GBK 解析成 UTF-8):convmv -f gbk -t utf-8 -r /target/broken_dir
实用增强技巧
- 加
pv查看实时进度:tar -cf - /dir | pv | ssh ... "tar -xf - -C /target" - 大文件加速压缩:替换
-z为-I pigz(多线程 gzip):tar -cf - /dir | pigz | ssh ... "pigz -d | tar -xf - -C /target" - 排除不需要的子目录:
tar --exclude='logs/' --exclude='cache/' -czf - /app | ssh ...










