linux 命令 -- rsync

  • linux 命令 rsync

  • 资料来源:

    https://www.ruanyifeng.com/blog/2020/08/rsync.html

  • 更新

    1
    2021.08.12 初始

导语

一直对 unix 及 unix 诞生的贝尔实验室印象比较模糊,只晓得 unix 极大影响了之后的操作系统,当然主要是 linux.

最近在阅读的一本书 unix传奇 才意识到日常接触到各种名词之间的联系.unix linux bsd posix awk sed …

unix 哲学之一是程序应该只关注一个目标,并尽可能把它做好.伴随 unix 诞生的各类命令可以算是这条哲学的最佳实践了,自诞生到现在的几十年基本的命令几乎没有太大变化.

突然很想完整了解这些命令和命令背后的故事.于是开新坑了.

本人水平远远不够到完整记述命令起源的地步,因此更多是使用的介绍.

如果对科学史不反感,推荐 unix传奇 阅读体验是一气呵成.

ps: 这个新坑,我希望能加快更新频率,专注在那些自己使用非常多的场景,可能并不是完整的命令介绍.

rsync

rsync

  • 增量式同步文件/文件夹
  • 支持通过 ssh 传输

rsync -xx source* destinaton

  • xx 是定制化命令
  • 将所有 source* 都同步到 destination/source*. 如果只需要同步 source* 下所有文件,写成 source*/ .
  • destination 不存在会自动创建

rsync 参数

-r: 递归同步,只同步文件本身.使用不多

-a: 递归同步,包括同步元数据(文件创建时间.修改时间等).

-n: 不确定那些文件会被同步,输出命令模拟结果.

-delete: rsync 默认并不删除 destination 下任何文件,不会将两个文件夹完全同步.delete 会对 destination 执行删除操作保证完全镜像.

所以常用的形式是

1
2
3
4
5
6
7
8
9
10
rsync -anv source destination #模拟
rsync -av source destination #执行
````

### 其他

通过 ssh 传输基本同 scp 命令,建议使用 ssh-key 配置 ssh config

```shell
rsync -av ssh_host:source* destination

rsync 的对比两个文件是不是有差异,是看 文件的修改时间和文件的大小.

日常使用

同步两个文件夹,但是文件差异只比较文件大小.我本地环境中同步 docker 配置居多,一旦涉及到 docker 内挂载的文件夹,修改时间就失去比较意义了.

1
2
rsync -anv --size-only source destination #模拟
rsync -av --size-only source destination #执行

ps: rsync 还有一种基于基准目录对比同步的方式,详情见阮老师的 rsync 用法教程