Использовать Robocopy для копирования только измененных файлов?

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

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

  • /XC :: исключить измененные файлы.
  • /XN :: исключить более новые файлы.
  • /XO :: исключить старые файлы.
  • /XX :: Исключить дополнительные файлы и каталоги.
  • /XL :: исключить одинокие файлы и каталоги.

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

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

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

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


person Cyberherbalist    schedule 25.04.2014    source источник
comment
Хм? Что нужно знать о MSBuild? Если у вас есть рабочее решение, вам подойдет более новая версия.   -  person Filburt    schedule 26.04.2014
comment
@ Filburt: Может быть, мне нужен быстрый и грязный способ развертывания моего веб-приложения? Кажется, нетривиального способа развертывания на веб-сервере из решения. Хотите попробовать дать ответ? Вам не нужно представлять ответ, ориентированный на роботизированное копирование.   -  person Cyberherbalist    schedule 26.04.2014
comment
Итак, что с отрицательным голосом?   -  person Cyberherbalist    schedule 26.04.2014
comment
Я не голосовал против, но признаю, что у меня возник соблазн отметить, что в то же время, когда вам потребовалось, чтобы опубликовать свой вопрос, вы могли бы попробовать сами.   -  person Filburt    schedule 26.04.2014
comment
О, @Filburt, я знаю. В настоящее время у меня есть шесть разных дел, и все они должны быть выполнены, прежде чем я смогу пойти домой сегодня вечером. Я просто пытался использовать StackOverflow в качестве покойника, чтобы сэкономить время. Я ТАКЖЕ искал, есть ли способ сделать это, о котором я еще не знал. Как я уже сказал, есть ли лучший инструмент? Я был совершенно готов использовать все, что было бы быстро. Возможно, я зря трачу время. Спасибо за Ваш ответ.   -  person Cyberherbalist    schedule 26.04.2014
comment
Но в следующий раз, когда у кого-то возникнет вопрос о Robocopy, угадайте, @Filburt, ответ будет здесь.   -  person Cyberherbalist    schedule 26.04.2014


Ответы (3)


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

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

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


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

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


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

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

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


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

person Filburt    schedule 25.04.2014

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

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

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

backup-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

backup-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

backup-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
person Whome    schedule 01.05.2015

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

robocopy c:\data c:\backup /e

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

person user8550317    schedule 02.09.2017
comment
Согласно: ‹computerhope.com/robocopy.htm› / e несет ответственность только за Копирование подкаталоги, в том числе Пустые. Нет ничего о пропуске файлов. - person Cribber; 10.08.2018