Я начинаю rsync
и пытался использовать его для синхронизации двух папок в локальной системе. У меня есть исходная папка, содержимое которой меняется со временем (некоторые файлы добавляются, некоторые изменяются, а некоторые удаляются) и целевая папка, которую я хочу, чтобы она почти была зеркалом источника. Итак, я попытался использовать rsync следующим образом:
rsync -a --delete "${source_dir}" "${target_dir}";
Это делает содержание цели точно таким же, как содержимое источника. Однако я хотел бы иметь возможность добавлять некоторые файлы к цели, а не к источнику, но я не хочу, чтобы они удалялись каждый раз, когда я выполняю rsync. С другой стороны, файлы, которые были синхронизированы, а затем удалены в источнике, должны быть удалены.
Есть ли способ сделать это без необходимости изменять команду для каждого файла, который я хочу исключить?
Обновление : я должен упомянуть, что я не ограничен rsync. Если другая программа выполняет свою работу, это тоже хорошо. Я просто попытался решить эту проблему с помощью rsync.
Ответы:
rsync
есть опция с именем--exclude-from
option, которая позволяет вам создать файл, содержащий список любых файлов, которые вы хотели бы исключить. Вы можете обновить этот файл всякий раз, когда хотите добавить новое исключение или удалить старое.Если вы создадите исключающий файл в
/home/user/rsync_exclude
новой команде будет:При создании файла списка исключений вы должны поместить каждое правило исключения в отдельную строку. Исключения относятся к вашему исходному каталогу. Если ваш
/home/user/rsync_exclude
файл содержал следующие параметры:secret_file
в вашем исходном каталоге, будет исключен.${source_dir}/first_dir/subdir
будут исключены, но пустая версияsubdir
будет синхронизирована.${source_dir}/second_dir
с префиксомcommon_name.
будут игнорироваться. Такcommon_name.txt
, иcommon_name.jpg
т.д.источник
Поскольку вы упомянули: я не ограничен rsync:
Скрипт для поддержки зеркала, позволяющий добавлять дополнительные файлы к цели
Ниже сценарий, который делает именно то, что вы описываете.
Сценарий может быть запущен в подробном режиме (устанавливается в сценарии), который будет отображать ход выполнения резервного копирования (зеркальное отображение). Нет необходимости говорить, что это также может быть использовано для регистрации резервных копий:
Подробный вариант
Концепт
1. При первом резервном копировании скрипт:
.recentfiles
2. На следующем и т. Д. Бэкапе
.currentfiles
,.recentfiles
(перечисление ситуации в предыдущей резервной копии) сравнивается с.currentfiles
. Только файлы, из.recentfiles
которых нет.currentfiles
, очевидно удаляются из источника и будут удалены из цели..currentfiles
переименовывается для.recentfiles
обслуживания следующего цикла резервного копирования и так далее.Сценарий
Как пользоваться
backup_special.py
Измените, если хотите, подробный параметр в заголовке скрипта:
Запустите его с источником и целью в качестве аргументов:
скорость
Я протестировал сценарий в каталоге на 10 ГБ с примерно 40 000 файлов и каталогов на моем сетевом диске (NAS), он сделал резервное копирование в то же время, что и rsync.
Обновление всего каталога заняло всего несколько секунд больше, чем rsync, для 40 000 файлов, что неприемлемо, и это неудивительно, поскольку сценарию необходимо сравнить содержимое с последней сделанной резервной копией.
источник