当然可以,以下是一篇面向新手的 Blog,系统地介绍了 rsync
命令及其常见用法,尤其是 rsync -av
的详细解析。
初识 rsync:高效同步文件的利器(含 rsync -av 详解)
在日常开发、部署或备份中,我们经常需要在不同目录或不同机器之间同步文件。rsync
是一个强大而高效的工具,能够帮助我们快速同步文件和目录,它的核心优势是仅传输变更的部分,大大提高了效率。
本文将带你入门 rsync
,并重点介绍其中最常用的参数组合之一:rsync -av
。
一、什么是 rsync?
rsync
是 Unix 系统中用于文件和目录同步的命令行工具。它支持本地同步(如:两个本地目录间)和远程同步(通过 SSH)。
rsync 的典型用途:
- 本地备份文件或目录;
- 同步服务器上的代码或配置文件;
- 自动化部署中将构建结果推送到服务器;
- 在远程机器之间传输大文件。
二、基本语法
rsync [选项] 源路径 目标路径
源路径
:你希望复制的文件或目录目标路径
:你希望同步到的路径,可以是本地或远程地址
本地示例:
rsync -av /Users/jack/project/ /Users/jack/backup/
远程示例(通过 SSH):
rsync -av ./build/ jack@192.168.0.2:/home/jack/deploy/
三、重点参数详解:rsync -av
这是最常用的参数组合之一。下面我们来详细拆解一下:
-a
(–archive)
表示“归档模式”,这是一个组合选项,开启了一系列有用的参数,包括:
-r
(递归复制子目录)-l
(复制符号链接)-p
(保留文件权限)-t
(保留时间戳)-g
(保留所属用户组)-o
(保留文件所有者)-D
(保留设备文件信息)
归档模式的目的是尽可能完整地保留原始文件的信息和结构,非常适合做备份。
-v
(–verbose)
表示“详细模式”,会在终端输出同步的详细过程,包括每个文件的传输情况。
举个例子:
rsync -av /Users/jack/photos/ /Volumes/Backup/photos/
这个命令做了以下事情:
- 将
photos/
目录中的所有内容(包括子目录)复制到外部磁盘Backup
的对应路径; - 保留所有文件的权限、时间戳、符号链接等元信息;
- 显示详细的同步进度。
注意结尾的 /
如果源路径末尾加了 /
,表示复制“目录中的内容”;
如果没有 /
,表示复制整个目录本身。
对比:
rsync -av /source/ /target/ # 同步的是 source 中的内容
rsync -av /source /target/ # 同步的是 source 整个目录
四、更多常用参数拓展
参数 | 含义说明 |
---|---|
-z | 启用压缩,适用于远程传输 |
--progress | 显示文件传输进度 |
--delete | 删除目标目录中源路径已不存在的文件 |
-e ssh | 指定使用 SSH 作为远程传输方式 |
--dry-run | 预演,不真正执行操作,常用于检查命令是否正确 |
示例:带删除和压缩的远程同步
rsync -avz --delete ./site/ user@192.168.1.10:/var/www/site/
这个命令会:
- 同步
site/
的内容到远程服务器/var/www/site/
- 压缩数据以减少传输量
- 删除远程中那些本地已不存在的文件
五、实际应用场景
- 定时备份
结合 cron 定时任务,每天定时备份重要目录:
0 2 * * * rsync -av /home/user/data/ /mnt/backup/data/
-
部署自动化
配合脚本或 CI 工具,将构建结果同步到测试或生产服务器。 -
同步大目录中的改动
不需要每次全量复制,rsync
只会传输内容有改动的文件块。
六、小结
命令 | 作用 |
---|---|
rsync -av src/ dst/ | 同步目录内容并保留所有文件信息 |
rsync -avz src/ remote:/path/ | 远程同步并压缩传输数据 |
rsync -av --delete src/ dst/ | 同步并删除目标中多余文件 |
rsync -av --dry-run src/ dst/ | 模拟同步以便检查是否正确 |
七、Last
rsync
是 Linux/Unix 工具箱中非常值得掌握的利器,特别是对系统运维、开发者、自动化部署等场景非常实用。希望你通过本文能掌握 rsync -av
的使用方法,并举一反三运用在自己的项目或日常操作中。
如果你对 rsync 更复杂的功能感兴趣(如排除文件、同步单个文件、限制带宽等),欢迎留言或点赞让我继续更新系列文章 😊