Utiliser Robocopy pour copier seulement les fichiers modifiés?

j'essaie de trouver un moyen simple de déployer uniquement les fichiers modifiés sur le serveur web pour un usage de déploiement. Dans le passé J'ai utilisé MSBuild, qui pourrait être dit de ne Copier que les fichiers qui étaient plus récents que ceux sur la cible, mais je suis pressé et je ne veux pas essayer de comprendre la nouvelle version de MSBuild.

puis-je utiliser ROBOCOPY pour cela? Il y a une liste d'options d'exclusion, qui est:

  • /XC :: exclure les fichiers Modifiés.
  • / XN :: exclure les nouveaux fichiers.
  • /XO :: exclure les fichiers les plus Anciens.
  • /XX :: exclure les autres fichiers et répertoires.
  • /XL :: exclure Solitaire des fichiers et des répertoires.

Que signifie exactement à exclure? Exclure la copie, ou exclure la réécriture? Par exemple, si j'ai écrit:

ROBOCOPY C:SourceFolderABC.dll D:DestinationFolder / XO

cette copie uniquement les nouveaux fichiers, pas les fichiers du même âge?

ou y a-t-il un meilleur outil pour ce faire?

17
demandé sur Cyberherbalist 2014-04-26 01:40:20

3 réponses

Pour répondre à toutes vos questions:

puis-je utiliser ROBOCOPY pour cela?

Oui, RC devrait convenir à vos exigences (simplicité, ne copie que ce qui est nécessaire)


Que signifie exactement à exclure?

il exclura copier-RC l'appelle sauter


/XO option Copier seulement les fichiers plus récents, pas les fichiers du même l'âge?

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

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


peut-être dans votre cas en utilisant le /MIR option pourrait être utile. En général, RC est plutôt ciblé sur les répertoires et les arborescences de répertoires que sur les fichiers uniques.

28
répondu Filburt 2014-04-25 22:34:13

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

ce script a besoin de NirCmd outil pour maintenir la souris en mouvement pour que ma machine ne tombe pas dans le sommeil. Script utilise un fichier lockfile pour indiquer quand le script de sauvegarde est terminé et mousemove.bat script est fermé. Vous pouvez laisser cette partie.

un autre est 7-Zip outil pour séparer virtualbox fichiers plus petits que les fichiers 4Go, mon dossier de destination est toujours FAT32 donc c'est obligatoire. Je devrais utiliser le disque NTFS mais je n'ai pas encore converti les disques de sauvegarde.

sauvegarde-robocopy.chauve-souris

@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\commandsza.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

sauvegarde-robocopy-emploi.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

sauvegarde-robocopy-movemouse sont tous.chauve-souris

@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
répondu Whome 2015-05-01 18:45:38

Ressemble /e option est ce que vous avez besoin, il va sauter mêmes fichiers/répertoires.

robocopy c:\data c:\backup /e

Si vous exécutez la commande deux fois, vous verrez que le second tour est beaucoup plus rapide car il ignore beaucoup de choses.

0
répondu user8550317 2017-09-02 00:47:43