Назад | Перейти на главную страницу

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

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

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

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

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

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

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

  1. xcopy / e / d источник dest

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

Если вам нравится делать это из интерфейса командной строки, xcopy (встроенный в WinXP) и robocopy (встроенный в Vista / Win7) оба делают копии «только для новых».

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

    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

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

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

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