Постоянно копировать все изменения файлов из одной папки в другую при изменении (Windows)

Постоянно копировать все изменения файлов из одной папки в другую при изменении (Windows)

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

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

У меня такой вопрос: есть ли скрипт командной строки, который я могу запустить, чтобы отслеживать любые изменения в исходной папке и автоматически копировать измененные файлы во временную папку X?

Идея состоит в том, чтобы исключить человеческий фактор, приводящий к необходимости вручную решать проблему двух локаций.

решение1

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

введите описание изображения здесь введите описание изображения здесь

решение2

Рассматривали ли вы возможность использования RoboCopy?http://ss64.com/nt/robocopy.html

RoboCopy можно настроить на копирование данных по истечении заданного периода времени и/или после внесения ряда изменений в наборы данных.

/MON:n : Источник мониторинга; запустить снова, когда будет обнаружено более n изменений.
/MOT:m : Источник мониторинга; запустить снова через m минут, если были внесены изменения.

решение3

Вы также можете захотеть взглянуть на (старение)DeltaCopyклиент и сервер. По сути, это Linux-подобныйrsyncреализация для Windows, с возможностью написания скриптов (при желании с использованием планировщика Windows) и ее главное преимущество в том, чтотолько измененные частиизмененного файла (да, файла!) передаются. Это может сэкономить много трафика в больших проектах. Недостатком, конечно, является то, что перед этим необходимо построить и передать список файлов.

Также есть несколько (небольших) оговорок:

  • Так как это устаревшее программное обеспечение, вам, возможно, придется заменитьcygwin1.dllна машинах Windows. (Если вы синхронизируете файлы между Linux и Windows, только. Он используетcygwin(как базовая структура, которая в то время не могла корректно обрабатывать 16-битное преобразование имен файлов Unicode/UTF-8.)
  • Это не совсем удобно для пользователя, вам стоит взглянуть на Linux.страница руководства rsyncчтобы раскрыть весь его потенциал.
  • В Windows для этого требуются «клиентская» и «серверная» машины.
  • Если сервер — это машина Linux, вам придется настроитьrsyncdправильно.
  • Нет поддержки теневого копирования томов Windows (хотя это может и не понадобиться).

Ну, у него также есть преимущества (вот почему я до сих пор использую его ежедневно):

  • Полностью совместим с *NIX rsync и rsyncd. Проверенная, известная и высокоэффективная система синхронизации. По-прежнему.
  • Сохраняет небольшие накладные расходы: только измененные данные (даже внутри файлов!) передаются по сети. Так что это также очень удобно, если вы работаете удаленно или подключаетесь к серверу через медленное соединение.
  • Failsafe, судя по всему. Я rsync'ил много-много гигабайт данных за эти годы, и ни одного сбоя не произошло при »исправлении« целевых файлов. Даже если я находил эту концепцию немного тревожной, поначалу.
  • Я до сих пор использую DeltyCopy для ежедневного резервного копирования файлов с машин Windows на центральный сервер Linux и сервер Windows 2003. Работает очень хорошо и безопасно, если правильно установить.

Ну, решать вам. Развлекайтесь! (И дайте нам знать о FreeFileSync!)

решение4

Полезная команда — xcopy /m src\* dest. она скопирует все файлы из src в dest иочищаетархивный бит для всех файлов src. Всякий раз, когда вы касаетесь файла src, Windows автоматически устанавливает архивный бит. При следующем запуске xcopy /mон скопирует только измененные файлы.

Если вы хотите, чтобы он работал непрерывно, напишите небольшой скрипт, например:

@echo off
echo Watching for changes to %1 ...
:top
xcopy /m /y %1\* %2 | find /v "File(s) copied"
timeout /t 2 >nul
goto :top

Связанный контент