Итак, у нас есть задача: синхронизировать некоторый набор папок с лежащими в них файлами. Причем задача стоит именно так:
- Синхронизация должна поддерживать передачу файлов по сети - т.е., например, с одного компьютера на другой;
- Синхронизация должна уметь копировать только новые файлы, не передавая заново уже существующие;
Из своей практики я могу предложить 2 пути: ROBOCOPY и XCOPY.
Путь первый - ROBOCOPY
Данная утилита идет из коробки в Windows 7 и Server 2008. На более старых ОС ее может не оказаться (например, на XP и Server 2003 из коробки ее точно нет). В таком случае можно скачать и установить Windows Server 2003 Resource Kit Tools: вот отсюда
http://www.microsoft.com/download/en/details.aspx?id=17657
. В этот тулкит, кроме всего прочего, входит наш инструмент.
Итак, вот пример использования данной утилиты:
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 символов.
Rsync для линукс
Для линукс сущетвует приложение Rsync кодом, которое можно использовать для синхронизации файлов и папок с локального компьютера на удаленный и наоборот. Примечательная особенность Rsync - возможность передавать зашифрованные файлы с помощью SSH и SSL. Кроме того, здесь передача файлов выполняется в один поток, в отличие от других подобных программ, создающий отдельный поток для передачи каждого файла. Это увеличивает скорость и убирает дополнительные задержки, которые становятся проблемой при передаче большого количества маленьких файлов.
Вау!! 😲 Ты еще не читал? Это зря!
- организация синхронизации данных , клиент-сервер для мобильного приложения ,
- единая служба синхронизации ,
- планирование заданий , планирование процессов ,
- теория синхронизации , синхронизация данных ,
- синхронизация и электропитание , синхронная передача сигнала ,
- синхронизация в system r ,
-
- задача синхронизации , задача о стрелках ,
Комментарии
Оставить комментарий
Операционные системы и системное программировние
Термины: Операционные системы и системное программировние