Ubuntu 复制王者:rsync -av 终极指南 —— 进度可视化 + 无损同步,效率甩 cp 几条街!

在 Ubuntu 中复制文件 / 文件夹,多数人第一反应是cp命令,但面对大文件、海量文件或跨设备同步时,cp的 “全量复制”“无进度反馈”“丢失属性” 等问题会让效率大打折扣。而rsync作为 “专业级同步神器”,搭配-av参数后,不仅能实现 “无损复制 + 增量同步”,还能通过简单配置显示实时进度,成为服务器迁移、数据备份、文件同步的首选工具。下面从核心优势、基础用法、进度可视化、进阶技巧到避坑指南,全面拆解rsync -av的使用方法。

一、为什么选 rsync -av?比 cp 强在哪?

rsync 的核心优势的是 “增量同步”(仅复制变化的文件 / 内容),而-av组合是最常用的 “黄金参数”,两者结合实现 “高效 + 无损” 复制,具体优势对比:

特性rsync -avcp 命令
复制逻辑增量同步(仅传变化部分)全量复制(每次重传所有文件)
属性保留保留权限、时间戳、所有者、软链接等仅保留部分属性(需额外加 - p/-d 参数)
进度显示支持实时进度条、速度、剩余时间无原生进度反馈(需借助第三方工具)
跨设备 / 远程同步支持本地→远程、远程→本地(SSH 协议)仅支持本地复制
断点续传支持(--partial 参数)不支持(中断后需重新复制)
大文件 / 海量文件效率极快(减少 IO 和带宽占用)较慢(重复传输未变化文件)

其中-av参数的具体含义(新手必懂):

  • -a:归档模式(archive),等价于-rlptgoD,核心作用是保留所有文件属性(权限、时间戳、所有者、组、软链接、设备文件等),适合 “无损复制” 场景(如服务器迁移、系统文件备份)。
  • -v:详细模式(verbose),输出复制过程中的文件列表,让你知道哪些文件正在被处理。

二、rsync -av 基础用法:复制文件 / 文件夹(本地 + 远程)

核心语法

# 本地复制(sudo用于权限受限的文件/目录,如系统文件、其他用户目录)
sudo rsync -av [--progress] 源路径 目标路径

# 远程复制(借助SSH协议,本地→远程/远程→本地)
sudo rsync -av [--progress] 本地路径 用户名@远程IP:远程路径
sudo rsync -av [--progress] 用户名@远程IP:远程路径 本地路径

关键注意:源路径末尾的 “/” 区别(新手最易踩坑)

  • 源路径不加 “/”:复制 “文件夹本身” 到目标目录(含文件夹名称)。
  • 源路径加 “/”:复制 “文件夹内的所有内容” 到目标目录(不含文件夹名称)。

场景 1:本地复制文件

需求:复制/home/user/data/file.tar.gz/mnt/backup(保留文件属性)
# 基础用法(显示详细文件列表)
sudo rsync -av /home/user/data/file.tar.gz /mnt/backup

# 带进度显示(推荐)
sudo rsync -av --progress /home/user/data/file.tar.gz /mnt/backup
  • 输出效果:会显示文件名称、大小、复制速度,进度条实时刷新。

场景 2:本地复制文件夹(最常用)

需求 1:复制/home/user/docs文件夹(含文件夹本身)到/mnt/backup
sudo rsync -av --progress /home/user/docs /mnt/backup
# 结果:目标目录下生成 /mnt/backup/docs(完整保留原文件夹)
需求 2:复制/home/user/docs内的所有内容到/mnt/backup(不含 docs 文件夹)
sudo rsync -av --progress /home/user/docs/ /mnt/backup
# 结果:docs内的文件/子文件夹直接复制到 /mnt/backup 下

场景 3:远程复制(本地→远程服务器)

需求:将本地/data/server文件夹同步到远程服务器(IP:192.168.1.100)的/opt/data目录
# 远程服务器需开启SSH服务,且本地有远程服务器的sudo权限
sudo rsync -av --progress /data/server/ ubuntu@192.168.1.100:/opt/data
  • 提示:若远程 SSH 端口不是默认 22(如 2222),需加-e "ssh -p 2222"参数:
    sudo rsync -av --progress -e "ssh -p 2222" /data/server/ ubuntu@192.168.1.100:/opt/data
    

场景 4:远程拉取(远程服务器→本地)

需求:将远程服务器的/opt/backup文件夹拉取到本地/home/user/remote_backup
sudo rsync -av --progress ubuntu@192.168.1.100:/opt/backup /home/user/remote_backup

三、重点:如何显示复制进度?两种实用方案

rsync 默认不显示进度条(仅-v参数显示文件列表),需通过额外参数实现 “实时进度可视化”,推荐两种方案:

方案 1:基础进度(--progress 参数)—— 适合单文件 / 少量文件

-av后添加--progress,会显示每个文件的复制进度(已复制大小、速度、剩余时间):

sudo rsync -av --progress /home/user/large_file.iso /mnt/backup
  • 输出效果示例:
    large_file.iso
      1.23G  50%  100MB/s    00:06
    
    含义:已复制 1.23GB,完成 50%,当前速度 100MB/s,剩余 6 秒。

方案 2:整体进度(--info=progress2 参数)—— 适合大量文件 / 文件夹

--progress会显示单个文件的进度,若复制上千个小文件,进度条会频繁切换,此时用--info=progress2显示整体进度(总复制大小、总进度、平均速度):

sudo rsync -av --info=progress2 /home/user/docs/ /mnt/backup
  • 输出效果示例:
    3.45G  78%  85MB/s    00:09  (xfr#123, to-chk=45/168)
    
    含义:总需复制 3.45GB,已完成 78%,平均速度 85MB/s,剩余 9 秒,已传输 123 个文件,待检查 45 个文件(共 168 个)。

方案 3:进度条美化(搭配 pv 工具)—— 进阶需求

若想获得更美观的进度条(如百分比 + 时间轴),可安装pv工具(管道查看器):

# 安装pv
sudo apt install pv

# 用法:通过管道传递rsync输出,显示整体进度
sudo rsync -av --progress /home/user/docs/ /mnt/backup | pv -lep -s $(du -sb /home/user/docs | awk '{print $1}')
  • 效果:显示平滑的进度条、传输速度、剩余时间,适合追求可视化体验的用户。

四、rsync -av 进阶技巧:提升效率 + 灵活控制

1. 排除指定文件 / 文件夹(--exclude 参数)

复制时跳过不需要的文件(如日志、缓存、临时文件):

# 排除单个文件
sudo rsync -av --progress --exclude="*.log" /home/user/docs /mnt/backup

# 排除多个文件/文件夹(用多个--exclude)
sudo rsync -av --progress \
  --exclude="*.log" \
  --exclude="temp/" \
  --exclude="node_modules/" \
  /home/user/docs /mnt/backup

2. 断点续传(--partial 参数)

复制大文件时中断(如网络断开、服务器重启),再次运行时无需重新复制,直接续传:

sudo rsync -av --progress --partial /home/user/large_file.iso /mnt/backup
  • 建议:将--partial加入日常命令,避免大文件复制中断后返工。

3. 压缩传输(-z 参数)—— 适合远程同步 / 低带宽场景

传输时压缩文件,减少网络带宽占用(本地复制无需加,反而会增加 CPU 开销):

# 远程同步时加-z,本地复制不加
sudo rsync -avz --progress /data/server/ ubuntu@192.168.1.100:/opt/data

4. 测试复制(--dry-run 参数)—— 避免误操作

先模拟复制过程,不实际传输文件,验证源路径、目标路径、排除规则是否正确:

sudo rsync -av --progress --dry-run /home/user/docs /mnt/backup
  • 输出会显示 “将要复制的文件”,确认无误后去掉--dry-run执行真实复制。

5. 后台运行(nohup)—— 适合超大型文件 / 文件夹

复制几十 GB / 上百 GB 文件时,避免终端关闭导致任务中断,用nohup让任务在后台运行:

# 后台运行,输出日志到rsync.log
nohup sudo rsync -av --progress --partial /home/user/big_data /mnt/backup > rsync.log 2>&1 &

# 查看进度:实时查看日志
tail -f rsync.log

五、注意事项:避坑指南 + 权限说明

1. sudo 的使用场景(必须加 sudo 的 3 种情况)

  • 复制系统文件 / 目录(如/etc/var):这些目录权限受限,普通用户无法读取 / 写入,必须用sudo
  • 复制其他用户的文件 / 目录(如/home/other_user/docs):需sudo获取权限,否则会提示 “Permission denied”。
  • 远程同步到远程服务器的系统目录(如/opt/usr/local):远程服务器的目标目录需 sudo 权限,此时用--rsync-path="sudo rsync"

    bash

    sudo rsync -av --progress --rsync-path="sudo rsync" /data/server/ ubuntu@192.168.1.100:/opt/data
    

2. 避免误删:rsync 的 “--delete 参数” 慎用

--delete参数会让目标目录与源目录 “完全一致”(删除目标目录中源目录没有的文件),适合同步备份,但极易误删数据:

# 危险!目标目录中多余的文件会被删除
sudo rsync -av --progress --delete /home/user/docs /mnt/backup
  • 建议:使用--delete前,必须先用--dry-run测试,确认不会删除重要文件。

3. 软链接处理:-a 参数的坑

-a参数会保留软链接(等价于-l参数),若想 “跟随软链接复制实际文件”,需替换-a-rptgoD(去掉-l),并添加-L参数:

# 跟随软链接,复制实际文件(而非链接本身)
sudo rsync -rptgoDv --progress -L /home/user/docs /mnt/backup

4. 磁盘空间检查

复制前先用df -h检查目标目录所在磁盘的剩余空间,避免因空间不足导致复制中断:

# 查看目标目录/mnt/backup所在磁盘的空间
df -h /mnt/backup

六、总结:rsync -av 的最佳使用场景

  1. 服务器迁移:无损复制系统文件、应用目录,保留权限和配置,迁移后直接可用。
  2. 数据备份:增量同步,每次仅备份变化的文件,节省磁盘空间和时间。
  3. 远程同步:跨服务器 / 跨网络同步文件,支持压缩和断点续传,适合低带宽场景。
  4. 大文件复制:比cp快数倍,且有进度反馈,避免 “复制半天不知道进度” 的尴尬。

记住核心命令模板(直接套用):

# 本地复制文件夹(带进度+断点续传)
sudo rsync -av --progress --partial 源目录/ 目标目录

# 远程同步(带压缩+进度)
sudo rsync -avz --progress --partial 本地目录/ 用户名@远程IP:远程目录

rsync 的强大远不止这些,但-av+--progress+--partial的组合已能覆盖 90% 的日常复制需求,掌握后彻底告别cp命令的低效和盲目!

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值