Часто возникает необходимость регулярного создания копии пользовательских данных. Размер дисков сейчас стремительно увеличивается и соответственно, объем данных также растет. Возникаеи задача инкрементального копирования, т.е. первый раз копируется все, а потом - только измененные файлы. Если взять частный случай - копирования папки в папку и оставить в стороне вопросы сетевого взаимодействия, то задача существенно упрощается.
Рассмотрим вкратце 2 случая - для Linux и для Windows.
cp -a -r -u source dest
-a - сохраняет атрибуты файлов
-r - рекурсивное копирование
-u - только более новые версии
Программа сделает все, что требуется, только:
Вашему вниманию предлагается простая программа для резервного копирования
(синхронизации содержимого 2х каталогов). Она предназначена только для
пользовательских файлов и имеет среднюю скорость работы. Не ручаюсь
за абсолютную точность ее работы, но на практике она меня здорово
выручала. Копирует каталог один в один. Синтаксис несколько отличен от
cp. Файлы заменяются только если они более поздние по дате или различен
размер. Наиболее важные данные изредка лучши копировать один в один программами
копирования или архивирования. Данная программа может использоваться для
синхронизации данных с NTFS разделов. Она минимально 'нагружает' жесткий
диск. Эти разделы наиболее чуствительны к копированию большого количества
файлов. Если у кого диск с трещеткой, то он может слышать ужасающие звуки
при копировании. Исключение составляет функция копирования/вставки через
проводник Windows. Она написана грамотно. Я тут заменил старую версию программы
новой и плохо тестированной. Если что, исходники прилагаются. При написании
программы 2 вещи представляли трудности: малоупотребительные символы в
именах файлов и диагностика файлов большого размера (больше 8 Гб). Не знаю,
верно ли я решил эти задачи.
Если у кого возникнет маловероятная задача восстановить весь backup
на старом месте, то можнос сделать примерно так:
rm -rf path/old_dir
cp -rv backup_dir path/
Пример создания архива (первый и последующие вызовы одинаковы):
copyb dir1(const) dir2(backup)
Пример использования:
xcopy /F/E/D/C/Y/H/R/K/O/X/G source dest
Будет выполнено рекурсивное копирование с сохранением атрибутов файлов
и заменой копий только более новыми по дате. Как и в предыдущем примере,
устаревшие файлы и каталоги не будут удалены и обновление по дате не отражает
всех возможных ситуаций. Для простейшего случая и этого может быть достаточно.
Для простейшего копирования предлагается программа synh. Вы можете воспользоваться консольной утилитой и создать командный файл, включающий несколько директорий или использовать графическую оболочку synhgui.
Программа имеет 2 режима работы:
Пример командного файла для синхронизации одного каталога:
synh %1 %2
synh %1 %2 restore
В первый проход выполняется копирование только новых или более свежих
версий файлов.
Второй проход уточняющий.
Если необходимо восстановить копию папки на старом (или новом месте),
то последовательность команд такая же. (это не тестировалось)
Если в именах каталогов содержатся пробелы, то аргумент нужно взять в кавычки. например:
"C:\Program Files\myapp"
Вообще, пробелов лучше избегать.