Я ищу инструмент, который может синхронизировать папки, генерируя сценарий, который затем можно запустить из командной строки, и сгенерированный скрипт не требует, чтобы инструмент был установлен для работы.
Как он может сравнивать каталоги, затем создавать сценарии для операций копирования / удаления и позволять вам сохранять сценарий и запускать сценарий с любого компьютера.
Также я работаю в мире 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
Это даст вам файл, содержащий следующий вывод:
*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), содержащая новые и измененные файлы, а также пакетный файл, в котором есть команды копирования для этих новых и измененных файлов и команды удаления для удаленных файлов.