В моей системе Linux есть две директории, которые я хочу синхронизировать. Большая часть содержимого этих каталогов одинакова, однако некоторые файлы различаются:

Справочник А содержит:

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

Это пример, реальные каталоги содержат тысячи файлов, а их размер составляет несколько ГБ.

Как я могу сделать это на Linux?

Обновление: Что делать, если файлы 1, 2, 4, 5 находятся не в каталоге A, а в подкаталоге AA, который находится в каталоге A? Файлы в каталоге B остаются без изменений. После синхронизации я не хочу получать несколько копий файлов 1, 2, 5.

2 ответа2

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, косая черта после первого имени каталога имеет большое значение - это указывает на то, что следует скопировать содержимое исходного каталога, а не сам каталог.

0

Предполагая, что оба каталога A и B находятся на одном уровне

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .