Usar o Robocopy para copiar apenas os ficheiros alterados?

Estou a tentar encontrar uma forma fácil de enviar apenas ficheiros alterados para o servidor web para fins de implantação. Em tempos passados eu usei MSBuild, que poderia ser dito para apenas copiar arquivos que eram mais novos do que os do alvo, mas eu estou com pressa e não quero tentar descobrir a versão mais recente do MSBuild.

Posso usar ROBOCOPY para isto? Existe uma lista de opções de exclusão, que é:

  • / XC:: excluir os ficheiros alterados.
  • / XN:: excluir os mais recentes arquivo.
  • / XO :: excluir ficheiros mais antigos.
  • / XX:: excluir ficheiros e pastas eXtra.
  • / XL:: excluir ficheiros e pastas solitários.
O que significa excluir exactamente? Excluir a cópia ou excluir a substituição? Por exemplo, se eu escrevesse:

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

Esta cópia só iria copiar ficheiros mais recentes, Não ficheiros da mesma idade?

Ou há uma ferramenta melhor para fazer isto?

Author: Cyberherbalist, 2014-04-26

3 answers

Para responder a todas as suas perguntas:

posso usar ROBOCOPY para isto?

Sim, O RC deve satisfazer as suas necessidades (simplicidade, apenas copiar o que é necessário)


o que significa excluir exactamente?

Isso irá excluir copiar-RC chama-o saltar

a opção /XO copiaria apenas ficheiros mais recentes e não ficheiros da mesma idade?

Sim, O RC só copiará os ficheiros mais recentes. Ficheiros da mesma idade serão ignorar.

(o comando correcto seria robocopy C:\SourceFolder D:\DestinationFolder ABC.dll /XO)


Talvez no seu caso, usar a opção /MIR possa ser útil. Em geral, RC é mais direcionado para diretórios e árvores de diretórios do que arquivos únicos.

 28
Author: Filburt, 2014-04-25 22:34:13

Pode usar o robocopy para copiar ficheiros com uma opção de arquivo e repor o atributo. Use a linha de comandos / M, este é o meu script de backup com alguns truques extras.

Este script precisa de uma ferramenta NirCmd para manter o mouse em movimento para que a minha máquina não caia em sono. Script está usando um lockfile para dizer quando o script de backup é concluído e mousemove.o bat script está fechado. Pode deixar esta parte de fora.

Outra ferramenta é 7-Zip para dividir ficheiros virtualbox menores que Ficheiros 4GB, a minha pasta de destino ainda é o FAT32, por isso é obrigatório. Devia usar o disco NTFS, mas ainda não converti os discos de reserva.

Robocopy de reserva.MTD

@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 de reserva.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

Reserva-robocopy-movemouse.MTD

@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
Author: Whome, 2015-05-01 18:45:38

Parece que a opção /e é o que precisa, irá saltar os mesmos ficheiros / pastas.

robocopy c:\data c:\backup /e
Se executar o comando duas vezes, verá que a segunda ronda é muito mais rápida, já que salta muitas coisas.
 0
Author: user8550317, 2017-09-02 00:47:43