2014-04-25 7 views
13

Я пытаюсь найти простой способ развертывания только измененных файлов на веб-сервере для развертывания. В прошлом я использовал MSBuild, которому можно было только скопировать файлы, которые были более новыми, чем те, которые были на целевом компьютере, но я спешу и не хочу пытаться выяснить более новую версию MSBuild.Использовать Robocopy для копирования только измененных файлов?

Могу ли я использовать ROBOCOPY для этого? Существует список вариантов исключения, а именно:

  • /XC :: eXclude Измененные файлы.
  • /XN :: eXclude Более новые файлы.
  • /XO :: eXclude Старые файлы.
  • /XX :: eXclude eXtra файлы и каталоги.
  • /XL :: eXclude Одинокие файлы и каталоги.

Что именно означает исключить? Исключить копирование или исключить перезапись? Например, если бы я писал:

ROBOCOPY C: \ SourceFolder \ ABC.dll D: \ DestinationFolder/XO

бы эту копию только новые файлы, а не файлы одного и того же возраста?

Или есть лучший инструмент для этого?

+1

Да? Что нужно знать о MSBuild? Если у вас есть рабочее решение, вы должны быть хорошо с * новой версией. – Filburt

+0

@Filburt: Может, мне нужен быстрый и грязный способ развернуть мое веб-приложение? Кажется, нет тривиального способа развертывания на веб-сервере из решения. Хотите попробовать ответить? Вам не нужно представлять ответ, ориентированный на роботографию. – Cyberherbalist

+0

Итак, что же с downvote? – Cyberherbalist

ответ

23

Чтобы ответить на все ваши вопросы:

Могу ли я использовать Robocopy для этого?

Да, RC должно соответствовать вашим требованиям (простота, только копировать то, что нужно)


Что именно это значит исключить?

Это исключит копирование - RC называет это пропуск


бы /XO вариант копирования только новые файлы, а не файлы одного и того же возраста?

Да, RC будет копировать только новые файлы. Файлы того же возраста будут пропущены.

(правильная команда будет robocopy C:\SourceFolder D:\DestinationFolder ABC.dll /XO)


Может быть, в вашем случае, используя опцию /MIR может быть полезным. В общем случае RC ориентирован скорее на каталоги и деревья каталогов, чем на отдельные файлы.

1

Вы можете использовать robocopy для копирования файлов с флагом архива и сброса атрибута. Используйте командную строку/M, это мой сценарий резервного копирования с несколькими дополнительными трюками.

Этот скрипт нуждается в инструменте NirCmd для перемещения мыши, чтобы моя машина не попала в спящий режим. Скрипт использует файл блокировки, чтобы указать, когда скрипт резервного копирования завершен, и скрипт mousemove.bat закрыт. Вы можете оставить эту часть.

Другое - 7-Zip инструмент для разделения файлов виртуальных боксов размером менее 4 ГБ, моя папка назначения по-прежнему FAT32, поэтому это является обязательным. Я должен использовать диск NTFS, но пока не преобразовал резервные диски.

резервного копирования robocopy.bat

@REM https://technet.microsoft.com/en-us/library/cc733145.aspx 
@REM http://www.skonet.com/articles_archive/robocopy_job_template.aspx 

set basedir=%~dp0 
del /Q %basedir%backup-robocopy-log.txt 

set dt=%date%_%time:~0,8% 
echo "%dt% robocopy started" > %basedir%backup-robocopy-lock.txt 
start "Keep system awake" /MIN /LOW cmd.exe /C %basedir%backup-robocopy-movemouse.bat 

set dest=E:\backup 

call :BACKUP "Program Files\MariaDB 5.5\data" 
call :BACKUP "projects" 
call :BACKUP "Users\Myname" 

:SPLIT 
@REM Split +4GB file to multiple files to support FAT32 destination disk, 
@REM splitted files must be stored outside of the robocopy destination folder. 
set srcfile=C:\Users\Myname\VirtualBox VMs\Ubuntu\Ubuntu.vdi 
set dstfile=%dest%\Users\Myname\VirtualBox VMs\Ubuntu\Ubuntu.vdi 
set dstfile2=%dest%\non-robocopy\Users\Myname\VirtualBox VMs\Ubuntu\Ubuntu.vdi 
IF NOT EXIST "%dstfile%" (
    IF NOT EXIST "%dstfile2%.7z.001" attrib +A "%srcfile%" 
    dir /b /aa "%srcfile%" && (
    del /Q "%dstfile2%.7z.*" 
    c:\apps\commands\7za.exe -mx0 -v4000m u "%dstfile2%.7z" "%srcfile%" 
    attrib -A "%srcfile%" 
    @set dt=%date%_%time:~0,8% 
    @echo %dt% Splitted %srcfile% >> %basedir%backup-robocopy-log.txt 
) 
) 

del /Q %basedir%backup-robocopy-lock.txt 
GOTO :END 


:BACKUP 
TITLE Backup %~1 
robocopy.exe "c:\%~1" "%dest%\%~1" /JOB:%basedir%backup-robocopy-job.rcj 
GOTO :EOF 


:END 
@set dt=%date%_%time:~0,8% 
@echo %dt% robocopy completed >> %basedir%backup-robocopy-log.txt 
@echo %dt% robocopy completed 
@pause 

резервного копирования Robocopy-job.rcj

:: Robocopy Job Parameters 
:: robocopy.exe "c:\projects" "E:\backup\projects" /JOB:backup-robocopy-job.rcj 


:: Source Directory (this is given in command line) 
::/SD:c:\examplefolder 

:: Destination Directory (this is given in command line) 
::/DD:E:\backup\examplefolder 

:: Include files matching these names 
/IF 
    *.* 

/M  :: copy only files with the Archive attribute and reset it. 
/XJD :: eXclude Junction points for Directories. 

:: Exclude Directories 
/XD 
    C:\projects\bak 
    C:\projects\old 
    C:\project\tomcat\logs 
    C:\project\tomcat\work 
    C:\Users\Myname\.eclipse 
    C:\Users\Myname\.m2 
    C:\Users\Myname\.thumbnails 
    C:\Users\Myname\AppData 
    C:\Users\Myname\Favorites 
    C:\Users\Myname\Links 
    C:\Users\Myname\Saved Games 
    C:\Users\Myname\Searches 

:: Exclude files matching these names 
/XF 
    C:\Users\Myname\ntuser.dat 
    *.~bpl 

:: Exclude files with any of the given Attributes set 
:: S=System, H=Hidden 
/XA:SH  

:: Copy options 
/S   :: copy Subdirectories, but not empty ones. 
/E   :: copy subdirectories, including Empty ones. 
/COPY:DAT :: what to COPY for files (default is /COPY:DAT). 
/DCOPY:T :: COPY Directory Timestamps. 
/PURGE  :: delete dest files/dirs that no longer exist in source. 

:: Retry Options 
/R:0  :: number of Retries on failed copies: default 1 million. 
/W:1  :: Wait time between retries: default is 30 seconds. 

:: Logging Options (LOG+ append) 
/NDL  :: No Directory List - don't log directory names. 
/NP   :: No Progress - don't display percentage copied. 
/TEE  :: output to console window, as well as the log file. 
/LOG+:c:\apps\commands\backup-robocopy-log.txt :: append to logfile 

резервного копирования Robocopy-movemouse.bat

@echo off 
@REM Move mouse to prevent maching from sleeping 
@rem while running a backup script 

echo Keep system awake while robocopy is running, 
echo this script moves a mouse once in a while. 

set basedir=%~dp0 
set IDX=0 

:LOOP 
IF NOT EXIST "%basedir%backup-robocopy-lock.txt" GOTO :EOF 
SET /A IDX=%IDX% + 1 
IF "%IDX%"=="240" (
    SET IDX=0 
    echo Move mouse to keep system awake 
    c:\apps\commands\nircmdc.exe sendmouse move 5 5 
    c:\apps\commands\nircmdc.exe sendmouse move -5 -5 
) 
c:\apps\commands\nircmdc.exe wait 1000 
GOTO :LOOP 
1

Похоже, что /e вариант - это то, что вам нужно, оно пропустит те же файлы/каталоги.

robocopy c:\data c:\backup /e 

Если вы запустите команду дважды, вы увидите, что второй раунд намного быстрее, так как он пропускает много вещей.

Смежные вопросы