Проекты

Синхронизатор

Хозяйке, такскзть, на заметку — нашел программу для синхронизации каталогов. Малюсенькая (300 кб) консольная утилитка nnbackup. Бесплатная для exUSSR, взять можно на http://www.nncron.ru/. Запускается в консоли, имеет множество настроек и режимов, среди которых мне понравился sync — синхронизация каталогов. Утилита сравнивает два каталога — исходный и конечный, и если в исходном что-то поменялось — добавился файл, исчез файл, поменялся файл — тут же приводит ровно в такое же состояние конечный. То есть копирует новый файл, переписывает измененный, стирает удаленный. Это очень удобно для регулярного бэкапа рабочих папок.

Безимени-1

Раньше я для этого использовал программу SyncToy, однако, прекрасно работая в пределах одного компа, при синхронизации с файл-сервером она почему-то подвешивает сетку. Я так и не разобрался в чем причина, плюнул и сменил ее на этот nnbackup. Тем более, по своей суровой простоте она как-то гармонирует с сервером на FreeBSD — консольное к консольному, такскзть.

Для автоматического запуска утилиты создал .cmd — файл, состоящий из строчек вида:

«c:\Program Files\nnBackup\nnbackup.exe» sync -i e:\111\ -o z:\111\ -t2 -s -da -v

по количеству синхронизируемых каталогов, и подвесил этот исполняемый файл на автоматический запуск Планировщиком раз в сутки, в два часа ночи. Строчка означает, что исходный каталог e:\111\ синхронизируется с каталогом назначения z:\111\. У меня Z: — сетевой диск, физически расположенный на файлсервере. Ключ -s означает, что нужно учитывать вложенные папки, ключ -da означает, что нужно удалять в конечном каталоге те файлы, которых нет в исходном, а вот до использования ключа -t2 я допер не сразу. Он заставляет утилиту сравнивать время модификации файла с точностью до двух секунд. Иначе она учитывает время изменений с точностью до миллисекунды. Поэтому сначала утилита тупо переписывала каталог по новой каждый раз, копируя туда с замещением весь исходный. Как я не бился, не мог заставить ее игнорировать файлы, которые не изменялись. Причем, при синхронизации в пределах одного компа все было нормально! А потом выяснилось, что время модификации в NTFS и в UFS учитывается немного иначе, поэтому утилите все время казалось, что время модификации имеет небольшую разбежку, то есть файлы новые! При загрублении точности учета времени до двух секунд, все заработало.

Недостаток — терминал не понимает кириллические имена каталогов в командной строке, когда они взяты из .cmd — файла. Это уже проблема собсно терминала Windows. Мне это не мешает, я со времен MsDOS имею привычку называть все каталоги латиницей, во избежание. Хотя, возможно, если сохранить .cmd — файл не в кодировке ANSI, а в кодировке UTF-8, то все будет нормально. Я пока просто не пробовал.

В общем, рекомендую для использования.

Ресурсы в момент интенсивного копирования:

copy2

2 комментария к записи Синхронизатор

  1. Андрей 15.04.2013 в 17:10 #

    Проблемы с интерпретацией кириллических (а точнее, любых национальных) имён файлов и каталогов связаны, как правило, с тем, что консоль по умолчанию работает в кодовой странице 866, а .cmd-скрипты, если они создавались в Notepad, будут иметь нативную системную кодовую страницу 1251 (или любую другую национально применимую).

    Так что выхода два: писать (конвертировать) скрипты в 866 или использовать команду chcp.