Robocopy - Sobrescrever todos os arquivos, a menos que o arquivo no destino seja mais recente

6

O título resume bem isso.

Eu tinha restaurado um compartilhamento de arquivos recentemente de um backup. Venha descobrir depois de cerca de um dia de usuários em produção, começamos a notar que alguns arquivos estavam corrompidos. Puxar esses arquivos do backup novamente mostra que os backups estão de fato intactos. No entanto, os usuários estão modificando arquivos no futuro.

Usando o robocopy, posso sobrescrever todos os arquivos neste compartilhamento ignorando arquivos mais recentes no destino? Em outras palavras, eu basicamente quero recopiar tudo, a menos que o usuário tenha feito alterações em um arquivo no compartilhamento.

A sinalização / is parece intrigante, mas não tem certeza se substituirá um arquivo por um novo timestamp.

E o conhecimento seria muito apreciado.

    
por cvidal 20.10.2018 / 18:06

2 respostas

7

link

/ xo Exclui arquivos mais antigos.

É disso que você precisa.

    
por 20.10.2018 / 18:34
0

Utilize:

  • fonte /MON:1 : MON ; executar novamente quando mais de n for alterado
  • /XN : e X clude N arquivos de ewer
robocopy D:\Source\Sync \ShareName\Sync /TBD /E /XN /MON:1 /LOG+:"\ShareName\Sync\Logs\Sync.log" /V /TEE /TS /XD Logs



O script a seguir irá monitorar o diretório de origem para quaisquer alterações e registrar sempre que um arquivo for copiado para o diretório de destino.

Script: File-Sync.cmd

::
                 ::[[---  RoboCopy File Sync Script ---]]::

::=========================================================================

@echo off

:: Parameters ::
::-------------------------------------------------------------------------

:: Set Variables ::

  :: Date:
     set Date=%date:~0,4%%date:~5,2%%date:~8,2%

  :: Time:

     :: Hour:
        set Hour=%time:~0,2%
        if "%hour:~0,1%" == " "  set HH=0%hour:~1,1%

     :: Minute:
        set MM=%time:~3,2%

     :: Seconds
        set SS=%time:~6,2%

     set Dtime=%HH%%mm%%ss%

  :: Destination:
     set Dest=\ShareName\Sync

  :: Log:
     set LogDir=\Share\Sync\Logs

  :: Source:
     set Src=D:\Source\Sync

  :: RoboCopy:

     :: Log:
        set Log=/V /TEE /TS /LOG:"%LogDir%\%date%_%dtime%.log"

     :: Options:
        set Options=/TBD

     :: What to Copy:
        set What=/COPY:DAT /DCOPY:DAT /E /XD Logs /XN /MON:1

     :: Save Job:
        set Save=/SAVE:C:\ProgramData\Scripts\Robocopy\File-Sync


:: Sync ::
::-------------------------------------------------------------------------
RoboCopy %Src% %Dest% %What% %Options% %Log% %Save%
  • Data e amp; Horário:
    • %date% : envia uma data no seguinte formato: yyyy.MM.dd
    • %dtime% : exibe a hora no seguinte formato: HHmmss
  • Diretórios:
    • %Dest% : Diretório de destino
    • %LogDir% : diretório de log
    • %Src% : diretório de origem
  • RoboCopy:
    • %log% : opções de log, gera um arquivo de log no seguinte formato YYYY.MM.DD_HHMMSS.log
      • /V : produza uma saída detalhada exibindo arquivos ignorados
      • /TEE : saída para a janela do console, bem como o arquivo de log
        • Útil se precisar executar a partir de um terminal ocasionalmente
      • /TS : incluir os carimbos de hora do arquivo de origem na saída
      • /LOG: : status de saída para o arquivo LOG (sobrescrever log existente)
        • Nunca sobrescreverá, desde que %dtime% esteja incluído
    • %options% : opções do RoboCopy
      • /TBD : aguarde nomes de compartilhamento T o B e D efinado
    • %what% : o que copiar
      • /COPY:DAT : para COPY para arquivos (o padrão é /COPY:DAT )
        • Copiar sinalizadores: D = Dados, A = Atributos, T = Timestamps
      • /DCOPY:DAT : o mesmo que acima, exceto para diretórios
      • /E : copiar subdiretórios, incluindo E mpty ones
      • /XD : E X clude D irectories que correspondem a nomes / caminhos fornecidos
        • Obrigatório se o diretório de log estiver armazenado no diretório de origem
      • /XN : e X clude N arquivos de ewer
      • fonte /MON:1 : MON ; correr de novo quando mais de n mudanças forem vistas
    • /SAVE : parâmetros SAVE para o arquivo de trabalho nomeado
      • Gera o arquivo de trabalho para: C:\ProgramData\Scripts\Robocopy\File-Sync.rcj


Executar script silenciosamente: NoShell-RoboCopy.vbs

'
            '::[[---  Run RoboCopy File Sync Silently  ---]]::'
'=========================================================================

If WScript.Arguments.Count >= 1 Then
    ReDim arr(WScript.Arguments.Count-1)
    For i = 0 To WScript.Arguments.Count-1
        Arg = WScript.Arguments(i)
        If InStr(Arg, " ") > 0 Then Arg = """" & Arg & """"
      arr(i) = Arg
    Next

    RunCmd = Join(arr)
    CreateObject("Wscript.Shell").Run RunCmd, 0, True
End If
  • Executar:

    wscript "C:\ProgramData\Scripts\Robocopy\NoShell-RoboCopy.vbs" "C:\ProgramData\Scripts\Robocopy\File-Sync.cmd"
    


Agendamento da tarefa: File-Sync.xml (executa 30s após o login do usuário)

<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.4" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
  <RegistrationInfo>
    <Date>2018-10-25T07:45:58.952588</Date>
    <Author>Windows\User</Author>
    <Description>Task to synchronize local disk to network backup</Description>
    <URI>\Backup\Network File Sync</URI>
  </RegistrationInfo>
  <Triggers>
    <LogonTrigger>
      <Enabled>true</Enabled>
      <Delay>PT30S</Delay>
    </LogonTrigger>
  </Triggers>
  <Settings>
    <MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
    <DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries>
    <StopIfGoingOnBatteries>true</StopIfGoingOnBatteries>
    <AllowHardTerminate>false</AllowHardTerminate>
    <StartWhenAvailable>true</StartWhenAvailable>
    <RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
    <IdleSettings>
      <StopOnIdleEnd>true</StopOnIdleEnd>
      <RestartOnIdle>false</RestartOnIdle>
    </IdleSettings>
    <AllowStartOnDemand>true</AllowStartOnDemand>
    <Enabled>true</Enabled>
    <Hidden>false</Hidden>
    <RunOnlyIfIdle>false</RunOnlyIfIdle>
    <DisallowStartOnRemoteAppSession>false</DisallowStartOnRemoteAppSession>
    <UseUnifiedSchedulingEngine>true</UseUnifiedSchedulingEngine>
    <WakeToRun>false</WakeToRun>
    <ExecutionTimeLimit>PT0S</ExecutionTimeLimit>
    <Priority>7</Priority>
    <RestartOnFailure>
      <Interval>PT1M</Interval>
      <Count>3</Count>
    </RestartOnFailure>
  </Settings>
  <Actions Context="Author">
    <Exec>
      <Command>%WinDir%\system32\wscript.exe</Command>
      <Arguments>"C:\ProgramData\Scripts\Robocopy\NoShell-RoboCopy.vbs" "C:\ProgramData\Scripts\Robocopy\File-Sync.cmd"</Arguments>
    </Exec>
  </Actions>
</Task>
    
por 25.10.2018 / 15:34