У меня есть 2 внешних запоминающих устройства по 1 ТБ каждое, и я хочу сделать резервную копию всего этого на сервер. Я хочу использовать для этого rsync, но обнаружил, что из ~ 100 000 файлов на каждом устройстве ~ 80 000 файлов одинаковы (имеют одинаковое имя и путь к каталогу). Я мог бы rsync обоих по отдельности, что бы объединить файлы, но мне нужен способ узнать, содержат ли «общие» файлы одинаковое содержимое, потому что я не хочу терять измененный файл, если он был изменен. Есть ли способ проверить это с помощью rsync?
Вы можете использовать флаг "-c" команды rsync, который проверяет контрольную сумму файлов. Если время модификации и размеры такие же. затем он выполнит контрольную сумму, определяющую, имеют ли файлы идентичное содержимое. Подробнее об этом здесь ==> https://serverfault.com/questions/211005/rsync-difference-between-checksum- and-ignore-times-options
Впоследствии, чтобы синхронизировать только обновленные или измененные файлы на удаленной машине, которые были изменены на локальной машине, мы можем выполнить пробный прогон перед копированием файлов, как показано ниже:
rsync -av --dry-run --update Documents/* user@x.x.x.x:/<directory>
и, если результат в порядке, используйте это
rsync -av --update Documents/* user@x.x.x.x:/<directory>
Для получения дополнительной информации см .: http://www.tecmint.com/sync-new-changed-modified-files-rsync-linux/
Для обеих передач вы можете использовать:
rsync --ignore-existing -i dir1/ user@x.x.x.x:/dir2/
Для первого transfer он просто перенесет все файлы и выведет их список.
При второй передаче будут исключены уже существующие файлы ( - ignore-existing
) и перечислены все файлы, которые были скопированы ( -i
). Затем вы можете выбрать копирование файлов, которые были исключены из передачи, используя find
, чтобы получить список всех файлов, и удалив файлы, перечисленные в выводе передачи 2.
К сожалению, нет возможности скопировать файл с немного другим именем, если он уже существует, что потребовало бы дополнительной логики и цикла.