Как отразить папку (копировать только отсутствующие и рекурсивно измененные файлы) в Windows?
Я пытаюсь найти быстрый способ рекурсивного обновления папки и всех подпапок из другой папки. Очевидно, что полное удаление и Xcopy будет работать, но это очень медленно.
После обновления папка назначения должна точно соответствовать исходной папке. Измененные файлы и новые файлы должны быть скопированы.
Если это облегчает задачу, не беспокойтесь об удалении файлов, которые находятся в папке назначения, но отсутствуют в исходной папке.
Эта операция развертывания / зеркала / обновления кажется довольно простой. Мне действительно нужно написать скрипт на C# для этого?
6 ответов
RoboCopy - это инструмент командной строки, предоставленный Microsoft, который может выполнять зеркалирование. На странице Wiki также упоминается графический интерфейс.
Даны папки "source" и "dest", где вы хотите, чтобы "dest" соответствовал "source".
- 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
Я, вероятно, сделал бы это с какой-нибудь системой контроля версий, возможно, с git. Просто создайте репо в исходном и целевом каталогах. Для синхронизации просто зафиксируйте из исходного каталога и извлеките из целевого каталога.
Git очень, очень быстро. Я слышал, что Mercurial также (хотя я не знаю из опыта).
Этот подход также даст вам большую гибкость, если вам нужно сделать больше позже.