Назад | Перейти на главную страницу

Есть ли инструмент синхронизации папок / файлов, который может генерировать сценарий синхронизации?

Я ищу инструмент, который может синхронизировать папки, генерируя сценарий, который затем можно запустить из командной строки, и сгенерированный скрипт не требует, чтобы инструмент был установлен для работы.

Как он может сравнивать каталоги, затем создавать сценарии для операций копирования / удаления и позволять вам сохранять сценарий и запускать сценарий с любого компьютера.

Также я работаю в мире Windows. Я просмотрел довольно много инструментов синхронизации, но ни один из тех, что я видел до сих пор, не генерирует скрипты.

Любые советы будут высоко ценится!

РЕДАКТИРОВАТЬ: У меня есть ситуация, когда у нас есть несколько веб-сайтов с одной и той же базовой кодовой базой. Когда эта основная кодовая база обновляется, появляются новые файлы, измененные файлы удаляются.

Я хотел бы создать сценарий, который может быть упакован с новыми и измененными файлами, который будет их копировать и удалять файлы, которые больше не нужны. Вроде действительно простая программа обновления. В настоящее время я делаю это с помощью Winmerge, помещаю измененные и новые файлы в архив, копирую имена недостающих элементов и пишу сценарий вручную.

Поскольку пакет будет содержать только новые и измененные файлы, сценарий должен запомнить, какие файлы необходимо удалить, поскольку при запуске сценария ему не нужно подключаться обратно к исходному источнику, чтобы определить наши удаленные файлы. В настоящее время я пишу сценарий вручную, и это утомительно. Я просто надеялся, что какой-нибудь инструмент для синхронизации файлов сможет упаковать обновление с измененными файлами и удалениями, похоже, это будет хорошей функцией.

Гм, robocopy сохраняет конфигурацию задания копирования в файл, который вы можете вызвать позже с помощью параметра. Этого достаточно по вашему определению сценария? Он был загружен в XP / 2003 и установлен по умолчанию в вариантах Vista / 7/2008. А также есть RichCopy, графический интерфейс, наложенный на вышеупомянутую robocopy. Он может даже вывести файл задания, чтобы вы могли позже запустить robocopy в сценарии.

Попробуйте Microsoft Synctoy. Он не генерирует сценарии, но его можно использовать. Если вам нужен собственный сценарий, вам, вероятно, придется написать свой собственный. Эти ребята были потрясающими, когда я только начинал изучать сценарии Windows.

Насколько я понимаю, у вас один источник с множеством идентичных пунктов назначения. Вы вносите изменения в свой источник (создание, обновление, удаление) и хотите легко сделать свои пункты назначения идентичными источнику со всеми этими изменениями?

Тогда это то, что вам нужно:

robocopy "\\sourcepath\folder" "\\destinationpath1\folder" /MIR /NFL /NDL
robocopy "\\sourcepath\folder" "\\destinationpath2\folder" /MIR /NFL /NDL
robocopy "\\sourcepath\folder" "\\destinationpath3\folder" /MIR /NFL /NDL

Параметр / MIR сделает ваши пункты назначения идентичными вашему источнику, включая действия по удалению. / NFL и / NDL не позволяют robocopy выводить изменяющиеся файлы и папки. Это дает простой вывод, в котором перечислены количество и размер измененных файлов. Если вам нужен журнал того, что было синхронизировано, исключите эти переключатели.

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

Обновление после первого комментария Криса к этому ответу

Я не думаю, что то, что вы ищете, изначально возможно с помощью robocopy или других инструментов командной строки.

Однако, я думаю, вот некоторый псевдокод, который сделает то, что вы ищете. Фактический сценарий выходит за рамки моих навыков без большого количества исследований, но это рабочий процесс, который вам понадобится:

$codebase = "\\codebase\"
$comparesource = "\\destination to compare to codebase\"
$packagesource = "\\where you store update package files\"
$finaldestination = "\\path you're actually trying to update\"

robocopy $codebase $comparesource /MIR /LOG:c:\log.txt /FP /NS /NJH /NJS /L
  • / FP = Полный путь, указанный в файле журнала
  • / NS = Размер не указан в файле журнала
  • / NJH и / NJS = нет заголовка задания и сводки в файле журнала
  • / L = Просто перечислите, что произойдет, на самом деле не вносите никаких изменений

Это даст вам файл, содержащий следующий вывод:

*EXTRA File          C:\file1.txt
       New File             c:\file2.xls
       Newer                c:\file3.txt

Тогда это нужно будет запустить:


If line contains "newer" or "New File" rest of line enters array $copyfilename
If line contains "*EXTRA" rest of line enters array $deletefilename
\\This would only work for a flat structure; subfolders complicate things and you'd need to grab the file name and subfolder name instead. 

for each in $copyfilename {
robocopy $codebase\$copyfilename $packagesource\$copyfilename /e

Append above line to $packagesource\updatepackage.bat, replacing $codebase with $packagesource and $packagesource with $finaldestination
}
for each in $deletefilename {
append "del $finaldestination\$deletefilename" to $packagesource\updatepackage.bat
}

В конце у вас будет папка (ваш $ packagesource), содержащая новые и измененные файлы, а также пакетный файл, в котором есть команды копирования для этих новых и измененных файлов и команды удаления для удаленных файлов.