web-dev-qa-db-fra.com

Utilisez Robocopy pour copier uniquement les fichiers modifiés?

J'essaie de trouver un moyen simple de ne déployer que les fichiers modifiés sur le serveur Web à des fins de déploiement. Dans le passé, j’utilisais MSBuild, qui permettait de copier uniquement les fichiers les plus récents, mais je suis pressé et je ne veux pas essayer de comprendre la nouvelle version de MSBuild. 

Puis-je utiliser ROBOCOPY pour cela? Il existe une liste d'options d'exclusion, à savoir:

  • / XC :: eXclude Fichiers modifiés.
  • / XN :: eXclude Fichiers plus récents.
  • / XO :: eXclude Anciens fichiers.
  • / XX :: eXclude les fichiers et répertoires eXtra.
  • / XL :: eXclude Fichiers et répertoires solitaires.

Qu'est-ce que cela signifie exactement d'exclure? Exclure la copie ou exclure le remplacement? Par exemple, si j'ai écrit:

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

est-ce que cela ne copierait que les fichiers les plus récents, pas les fichiers du même âge?

Ou existe-t-il un meilleur outil pour le faire?

19
Cyberherbalist

Pour répondre à toutes vos questions:

Puis-je utiliser ROBOCOPY pour cela?

Oui, RC doit répondre à vos besoins (simplicité, ne copier que ce qui est nécessaire)


Qu'est-ce que cela signifie exactement d'exclure?

Cela exclura la copie - RC l’appelle sautant


L'option /XO ne copie-t-elle que les fichiers les plus récents, pas les fichiers du même âge?

Oui, RC ne copiera que les fichiers les plus récents. Les fichiers du même âge seront ignorés.

(la commande correcte serait robocopy C:\SourceFolder D:\DestinationFolder ABC.dll /XO)


Peut-être que dans votre cas, utiliser l'option /MIR pourrait être utile. En général, RC est plutôt ciblé sur les répertoires et les arborescences de répertoires que sur des fichiers uniques.

33
Filburt

Vous pouvez utiliser robocopy pour copier des fichiers avec un indicateur d'archive et réinitialiser l'attribut. Utilisez la ligne de commande/M, ceci est mon script de sauvegarde avec quelques astuces supplémentaires.

Ce script a besoin de NirCmd tool pour garder la souris en mouvement afin que ma machine ne tombe pas en veille. Le script utilise un fichier de verrouillage pour indiquer quand le script de sauvegarde est terminé et que le script mousemove.bat est fermé. Vous pouvez laisser cette partie.

Un autre outil est 7-Zip tool pour séparer les fichiers de virtualbox inférieurs à 4 Go. Mon dossier de destination est toujours FAT32, ce qui est obligatoire. Je devrais utiliser un disque NTFS mais je n'ai pas encore converti les disques de sauvegarde.

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
1
Whome