Итак, у нас есть задача: синхронизировать некоторый набор папок с лежащими в них файлами. Причем задача стоит именно так:
— Синхронизация должна поддерживать передачу файлов по сети — т.е., например, с одного компьютера на другой;
— Синхронизация должна уметь копировать только новые файлы, не передавая заново уже существующие;
Из своей практики я могу предложить 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, иначе при автоматической синхронизации она попросту зависнет, встретив на своем пути ошибку доступа.
Много больше опций Вы можете почерпнуть из хелпа:
robocopy /?
Чем эта утилита хороша по сравнению с 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:\исходная_папка \\192.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 атрибуты доступа
По моему личному опыту ROBOCOPY лучше справляется со своей работой, в особенности, если Вы копируете файлы файловой помойки, куда лазят несколько сотен людей — бардака там бывает достаточно и длинна файловых имен с путем нередко больше 256 символов.
автор: Денис «Reagent» Ходус
Источник.
70 лет стаж 5.5 года. Статья полезная, но автор её писал больше для себя, чем для нас.. Кстати из своего опыта и нескольких предупреждений от пк — robocopy требует осторожности… List