当前位置: 首页 > news >正文

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.iso1.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命令的低效和盲目!

http://www.dtcms.com/a/585838.html

相关文章:

  • ubuntu磁盘管理、磁盘扩容
  • 专业设计网站排名百达翡丽手表网站
  • 广度优先搜索
  • 高端网站建设公司名称动物自己做的网站
  • 编译OpenCV
  • jQuery Mobile 事件详解
  • 网站换模板影响国家域名注册中心
  • 佛山的网站建设公司凡科建站微信小程序
  • 建设部网站网上大厅长沙景点免费
  • 不练不熟,不写就忘 之 compose 之 动画之 animateSizeAsState动画练习
  • 函数模板和类模板
  • 从 0 到 1:我的 C++ 游戏开发全记录
  • 手机屏幕表面缺陷检测分割系统1:数据集说明(含下载链接)
  • 【MyBatis】 吃透 MyBatis:多表查询、SQL 注入防护(#{} vs ${})与连接池优化
  • 智能体AI的六大核心设计模式
  • 基于SLERP(Spherical Linear Interpolation) 进行旋转滤波
  • 站长工具seo查询5g5g成都市四方建设工程监理有限公司网站
  • 网站建设百科深圳网站建设公司fantodo
  • 接口自动化详细介绍
  • 深入解析多态:面向对象编程灵魂
  • 基于开源链动2+1模式AI智能名片S2B2C商城小程序的赛道力构建与品牌发展研究
  • 怎么做网站地图的样式wordpress网站后缀
  • 【报错解决】java:无效的目标发行版:17;源发行版17需要目标发行版17
  • C/C++输入输出初级(一) (算法竞赛)
  • java list<string> to string[] 怎么转换
  • 【Javaweb学习|黑马笔记|Day4】Web后端基础
  • 做智能网站系统重庆企业
  • Vue 项目实战《尚医通》,首页静态搭建 banner,笔记07
  • 构建AI智能体:八十八、大模型编辑:从一本百科全书到可修订的活页本
  • 2025.11.07 力扣每日一题