web-dev-qa-db-ja.com

変更時にすべてのファイルの変更を1つのフォルダーから別のフォルダーに継続的にコピーする(Windows)

私は大規模なJava Webアプリケーションを一元管理されたバージョン管理下に置いて作業していますが、ソースファイルを使用して実際のサーバーを構築および実行し、作業するすべてのファイルをコピーします実行中にランダムな一時ディレクトリに移動します。

私の問題は、ファイルへの変更を確認するためにこの巨大なアプリケーションを再構築するか、すべての変更を追跡し、変更したファイルをソースの場所にコピーしてからソース管理に戻す必要があることです。

私の質問は、ソースフォルダーの変更を監視し、変更されたファイルを一時フォルダーXに自動的にコピーする、実行可能なコマンドラインスクリプトはありますか?

このアイデアは、2つの場所の問題を手動で軽減する必要があるという人為的な障害点を取り除くことです。

7
Barney

FreeFileSync をお勧めします。これは、数秒ごとに2つのフォルダーを自動的に同期するスクリプトを作成する機能を持っているようです。個人的には使ったことはありませんが、有望に見えます。

enter image description hereenter image description here

8
David

RoboCopyの使用を検討しましたか? http://ss64.com/nt/robocopy.html

RoboCopyは、設定された時間が経過した後、および/またはデータセットにいくつかの変更が発生した後にデータをコピーするように設定できます。

/ MON:n:モニターソース; nを超える変更が見られたときに再度実行します。
/MOT:m:MOnitorソース。変更された場合、m分後に再度実行します。

2
BobJim

また、(年齢)DeltaCopyクライアントとサーバーを確認することもできます。基本的に、これはWindowsのLinuxに似たrsync実装であり、スクリプト化可能(必要に応じてWindowsスケジューラを使用)であり、その主な利点は変更されたファイル(はい、ファイル!)の変更された部分のみが送信されます。これにより、大きなプロジェクトで多くのトラフィックを節約できます。もちろん欠点は、以前にファイルリストを作成して送信する必要があることです。

また、いくつかの(小さな)警告があります。

  • 古いソフトウェアであるため、Windowsマシンではcygwin1.dllを置き換える必要がある場合があります。 (LinuxとWindowsの間でファイルを同期する場合のみ。16ビットのUnicode/UTF-8を処理しない基本的なフレームワークとしてcygwinを使用します。そのときのファイル名変換は正しく行われます。)
  • それほどユーザーフレンドリーではありません。その可能性を最大限に活用するには、Linuxのrsyncマンページを参照する必要があります。
  • Windowsでは、「クライアント」と「サーバー」のマシンが必要です。
  • サーバーがLinuxマシンの場合、rsyncdを正しくセットアップする必要があります。
  • Windowsのボリュームシャドウコピーはサポートされていません(ただし、必要ない場合もあります)。

まあ、それはまた利点があります(それが私がまだそれを毎日使用している理由です):

  • * NIX rsyncおよびrsyncdと完全に互換性があります。実績のある、有名で非常に効率的な同期システム。まだ。
  • オーバーヘッドを小さく保つ:変更されたデータのみ(ファイル内でも!)がネットワーク経由で転送されます。したがって、在宅勤務をしている場合や、低速の接続を介してサーバーに接続している場合も非常に便利です。
  • どうやらフェイルセーフ。私は何年にもわたって何ギガバイトものデータをrsyncしてきましたが、ターゲットファイルを「パッチする」ときに1つの欠陥は発生しませんでした。最初は少し気になると思っても。
  • 私はまだDeltyCopyを使用して、Windowsマシンから中央のLinuxサーバーとWindows 2003サーバーの両方に毎日ファイルをバックアップしています。正しくインストールされていれば、非常にうまく機能し、安全です。

まあ、あなた次第です。楽しんで! (そしてFreeFileSyncについて知らせてください!)

0
Moonbase

便利なコマンドはxcopy /m src\* destです。これにより、すべてのファイルがsrcからdestにコピーされ、clearsすべての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
0
John Henckel