如何在 Linux 上智能同步目录?

如何在 Linux 上智能同步目录?

我的 Linux 系统上有两个目录需要同步。这些目录的大部分内容相同,但有些文件有所不同:

目录 A 包含:

File 1
File 2
File 4
File 5

目录 B 包含:

File 1
File 2
File 3
File 5

同步后,我希望目录 A 和目录 B 都包含:

File 1
File 2
File 3
File 4
File 5

这是一个例子,真实的目录包含数千个文件,其大小为几 GB。

我如何在 Linux 上执行此操作?

更新:如果文件 1、2、4、5 不在目录 A 中,而是在目录 A 中的子目录 AA 中,该怎么办?目录 B 中的文件保持不变。同步后,我不希望最终得到文件 1、2、5 的多个副本。

答案1

你想要的是rsync

$ cd -- "$(mktemp --directory)
$ mkdir A B
$ touch A/File\ {1,2,4,5}
$ touch B/File\ {1,2,3,5}
$ rsync -a A/ B
$ rsync -a B/ A
$ ls A B
A:
'File 1'  'File 2'  'File 3'  'File 4'  'File 5'

B:
'File 1'  'File 2'  'File 3'  'File 4'  'File 5'

rsync将仅传输同步目录所需的文件。与其他 *nix 工具不同,第一个目录名后的斜线很重要 - 它表示内容应该复制源目录而不是目录本身。

答案2

假设两个目录AB都在同一级别

$ rsync -a A/ B/ & rsync -a B/ A/

相关内容