我的 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
假设两个目录A
和B
都在同一级别
$ rsync -a A/ B/ & rsync -a B/ A/