Синхронизация файлов и папок по сети или резервное копирование

Итак, у нас есть задача: синхронизировать некоторый набор папок с лежащими в них файлами. Причем задача стоит именно так:
— Синхронизация должна поддерживать передачу файлов по сети — т.е., например, с одного компьютера на другой;
— Синхронизация должна уметь копировать только новые файлы, не передавая заново уже существующие;

Из своей практики я могу предложить 2 пути: ROBOCOPY и XCOPY.

Путь первый — ROBOCOPY

Данная утилита идет из коробки в Windows 7 и Server 2008. На более старых ОС ее может не оказаться (например, на XP и Server 2003 из коробки ее точно нет). В таком случае можно скачать и установить Windows Server 2003 Resource Kit Tools: вот отсюда. В этот тулкит, кроме всего прочего, входит наш инструмент.

Итак, вот пример использования данной утилиты:

robocopy D:\исходная_папка \\192.168.0.1\целевая_папка /E /Z /COPY:TDASO /DCOPY:T /M /R:2 /W:5

В данном примере:
Мы копируем папку «исходная папка», находящуюся на локальном диске D:
Мы копируем эту папку на компьютер \192.168.0.1 в папку «целевая папка»
/E : Мы копируем все подпапки и файлы
/Z : Включаем поддержку докачки (на случай обрыва связи)
/COPY:TDASO : Копируем все атрибуты и ACL прав доступа NTFS (но не копируем атрибуты аудита)
/DCOPY:T : Копируем время создания папок
/M : Копируем только файлы с установленным атрибутом «A — Архивный» и сбрасываем этот атрибут, что позволяет нам копировать только измененные файлы.
/R : Количество повторных попыток копирования файла в случае, если копирование не удалось. Причем «не удалось» срабатывает и в том случае, если доступ к файлу закрыт. По-умолчанию = 1 миллионы, т.е. бесконечно, потому копирование благополучно встанет на первом же файле, к которому не будет доступа.
/W : Задержка в секундах между попытками копирования. По-умолчанию = 30 секундам.

Заметка. Очень рекомендую задавать вручную параметры /R и /W, иначе при автоматической синхронизации она попросту зависнет, встретив на своем пути ошибку доступа.

Чем эта утилита хороша по сравнению с XCOPY:

Она умеет работать с файлами, длина имени которых больше 256 символов
Она умеет делать зеркало, т.е. чистую синхронизацию, при которой файлы, удаленные в папке-источнике, будут удалены и в папке назначения.

Для того, чтобы зеркалировать папки (т.е. удалять в папке назначения все файлы, которые более не существуют в папке-источнике) — нужно добавить ключ «/PURGE»:

robocopy D:\исходная_папка \\192.168.0.1\целевая_папка /E /Z /COPY:TDASO /DCOPY:T /M /PURGE

А вот несколько примеров запуска этой утилиты:

Скопировать файлы, измененные за последние 5 дней (исключая сегодня):

robocopy D:\исходная_папка \\192.168.0.1\целевая_папка /maxage:5 /minage:1

Переместить все файлы (не копировать):

robocopy D:\исходная_папка \2.168.0.1\целевая_папка /move /e

Копировать только указанные файлы по шаблону:

robocopy D:\исходная_папка \\192.168.0.1\целевая_папка *.xls *.doc *.txt /e

Путь второй — XCOPY

Данная утилита более старая, чем ROBOCOPY, и имеет меньше возможностей. Так, она не поддерживает пути с длинной имени более 256 символов (как это не умело делать FAT) и она не умеет делать зеркалирование. Более того, у нее отмечаются проблемы с копированием прав доступа ACL NTFS, как минимум — при копировании файлов на Samba-сервер.

Вот пример ее запуска:

xcopy "d:\исходная_папка" \\192.168.0.1\целевая_папка /D /E /C /I /H /R /K /Y /F /O

Здесь мы:

Копируем все файлы из директории «исходная папка», находящейся на диске «D:»
Копируем все файлы на компьютер \192.168.0.1 в папку «целевая папка»
/D : Копируем только измененные файлы (по дате изменения)
/E : Копируем подкаталоги, включая пустые
/C : Игнорируем ошибки, если они возникли во время копирования, и продолжаем копирование
/I : Целевой объект — это папка
/H : Копировать скрытые и системные файлы
/R : Перезаписываем файлы, предназначенные только для чтения
/K : Копируем атрибуты, такие, как «только для чтения», «архивный», «системный», «скрытый»
/Y : Не спрашивать подтверждение на перезапись файлов
/F : Вывод полных имен исходных и целевых файлов (иначе — только имена файлов, без папок)
/O : Если установлен — копировать так-же ACL NTFS атрибуты доступа

Источник: https://it-chainik.ru/windows-sinhronizatsiya-fajlov-i-papok-po-seti/