Как отразить папку (копировать только отсутствующие и рекурсивно измененные файлы) в Windows?

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

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

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

Эта операция развертывания / зеркала / обновления кажется довольно простой. Мне действительно нужно написать скрипт на C# для этого?

6 ответов

RoboCopy - это инструмент командной строки, предоставленный Microsoft, который может выполнять зеркалирование. На странице Wiki также упоминается графический интерфейс.

Даны папки "source" и "dest", где вы хотите, чтобы "dest" соответствовал "source".

  1. xcopy / e / d source dest

Увидел ваш комментарий "не беспокойтесь об удалении устаревших файлов".

Если вы довольны работой с CLI, xcopy (встроенный в WinXP) и robocopy (встроенный в Vista/Win7) делают копии "только в случае более новых".

    cls
    @echo off
    pushd %~dp0 >nul 2>&1
    if not "%1" == "max" start /max cmd /c %0 max & exit/b >nul 2>&1
    color 1f
    TITLE robocopy "Source" "Dest" /FFT /NC /NDL /MIR /IT /MT:1 /R:0 /W:0
    robocopy "Source" "Dest" /FFT /NC /NDL /MIR /IT /MT:1 /R:0 /W:0
    exit /b n

Total Commander имеет функцию синхронизации.

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

Git очень, очень быстро. Я слышал, что Mercurial также (хотя я не знаю из опыта).

Этот подход также даст вам большую гибкость, если вам нужно сделать больше позже.

Другие вопросы по тегам