13

I'm working on a massive Java web application which is kept under centralized version control, but the source files are used to build and run the actual server, which then copies all the files I work on into a random temporary directory while it's running.

My problem is that I need to either rebuild this huge application to see any changes to my files, or keep track of all my changes and copy over the files I've changed back to their source location before committing them back to source control.

My question is: is there a command line script I can run that will monitor any changes in the source folder and automatically copy changed files across to temporary folder X?

The idea is to remove the human point of failure in having to manually mitigate the two-locations problem.

9
  • Do you want a folder that it a perfect copy or a folder that consists only of changed files?
    – David
    Feb 25, 2013 at 15:15
  • Perfect copy. When I build the application, it makes one big copy. I'd like my manual changes to the source to be automatically migrated to the copy folder.
    – Barney
    Feb 25, 2013 at 15:17
  • Robocopy can do it but I am not sure if that's a good idea.
    – kush
    Feb 25, 2013 at 15:18
  • Thanks @kush, wasn't aware of robocopy. Not sure it's a good idea… Because robocopy is flaky? Implementation is dangerous? Inherently bad idea?
    – Barney
    Feb 25, 2013 at 15:20
  • You should not have to come up with your own implementation to something that sounds like (please correct me if I am wrong) a pretty common scenario. You are taking files on the production server and updating your temp folder (and not the other way), right?
    – kush
    Feb 25, 2013 at 15:27

5 Answers 5

11

I suggest FreeFileSync, which appears to have the ability to create a script that will automatically sync the two folders every few seconds. I haven't played with it personally, but it looks promising.

enter image description here enter image description here

4
  • Thanks for this — it makes use of Volume Shadow Copy, which seems to be the crucial caveat to the robocopy solution, so it looks promising. I'll give it a twirl and qualify in a minute.
    – Barney
    Feb 25, 2013 at 15:56
  • 2
    This works great. There's a bunch of granular options to specify behaviour when Item exists on left side only, Right side is newer, etc — the batch tool can execute every 0 seconds for near instantaneous response without any noticeable performance hit (for 300 files over 150MB), it reports and optionally alerts/pauses/logs on change… GUI interface is a bit weird and it takes tweaking, but it's powerful and flexible. Again, many thanks.
    – Barney
    Feb 26, 2013 at 13:53
  • Great soft! Good online documentation. Thx ! Jul 4, 2018 at 6:58
  • The downside of this is that you do need to "install more software", rather than relying on the tools already built into the OS, so folks who are okay with the extra work of setting up a robocopy (which comes with windows) may be better off using that. Sep 3, 2021 at 16:22
4

Have you considered using RoboCopy? http://ss64.com/nt/robocopy.html

RoboCopy can be set to copy the data after a set period of time has elapsed and/or a number of changes to the datasets have occured.

/MON:n : MONitor source; run again when more than n changes seen.
/MOT:m : MOnitor source; run again in m minutes Time, if changed.

2
  • You could also add the resulting batch file to the Windows Task Scheduler to run at specific times.
    – RobN
    May 12, 2015 at 14:21
  • 1
    And, not unimportantly, is built into windows. It's not a utility you have to install yourself, you already have it installed. Sep 3, 2021 at 16:19
1

You also might want to have a look at the (ageing) DeltaCopy client and server. Basically, it’s a Linux-like rsync implementation for Windows, scriptable (using the Windows scheduler, if wanted) and its main advantage is that only the changed parts of a modified file (yes, file!) are transmitted. This can save a lot of traffic on big projects. A disadvantage is, of course, that it has to build and transmit a file list before.

Also, there are some (small) caveats:

  • As it is older software, you might have to replace cygwin1.dll on Windows machines. (If you sync files between Linux and Windows, only. It uses cygwin as the underlying framework which didn’t handle 16-bit Unicode/UTF-8 filename conversion correctly at that time.)
  • It’s not exactly that user-friendly, you should have a look at Linux’ rsync manpage to exploit its full potential.
  • On Windows, it requires a »client« and a »server« machine.
  • If the server is a Linux machine, you’ll have to setup rsyncd correctly.
  • No support for Windows’ Volume Shadow Copy (might not be needed, though).

Well, it also has advantages (that’s why I still use it daily):

  • Fully compatible with *NIX rsync and rsyncd. A proven, well-known and highly efficient syncing system. Still.
  • Keeps overhead small: Only the changed data (even inside files!) gets transported over the network. So it’s also very nice if you are teleworking or connect to your server via slow connections.
  • Failsafe, apparently. I’ve rsync’d many many gigabytes of data over the years, and not one flaw happened when »patching up« the target files. Even if I found the concept a little worrying, at first.
  • I still use DeltyCopy to backup files from Windows machines to both a central Linux server and a Windows 2003 server on a daily basis. Works extremely well and safe, if installed correctly.

Well, up to you. Have fun! (And let us know about FreeFileSync!)

0

A useful command is xcopy /m src\* dest. this will copy all files from src to dest and clears the archive bit on all the src files. Whenever you touch a src file, Windows will automatically set the archive bit. Next time you run xcopy /m it will only copy the changed files.

If you want to run it continuously, write a small script like

@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
1
  • The question was about it working continuously though, this requires manual, or "automated manual" (e.g. at some time interval, rather than when it's actually necessary). Sep 3, 2021 at 16:20
0

Use robocopy to mirror a directory tree:

robocopy source\ dest\ /mir

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.