Saltar al contenido

¿Robocopy SALTA la copia de archivos existentes de forma predeterminada?

Investigamos en distintos espacios para tener para ti la respuesta para tu dilema, si continúas con dificultades deja tu duda y respondemos porque estamos para servirte.

Solución:

De forma predeterminada, Robocopy omite la copia de archivos existentes si los metadatos específicos de los archivos coinciden entonces esos archivos será omitido desde la operación de copia “archivo” (/COPY:DAT).

Valores predeterminados de Robocopy

  • Omite la copia del archivo si es la última hora de escritura, el nombre del archivo, y coincidencia de tamaño de archivo
  • Copia el archivo si fue la última vez que se escribió, el nombre del archivo, o los tamaños de archivo no coinciden

Como indica @ mklement0, el defecto implícito /COPY:DAT no copiará archivos con datos diferentes si la marca de tiempo [LastWriteTime] y el tamaño del archivo es el mismo, por lo que se trata de un salto predeterminado.

Entonces, si por alguna razón tiene dos archivos que está sincronizando que tienen un tamaño de archivo, un nombre de archivo y la última modificación attributes aunque los datos sean diferentes, no copiará el archivo de origen.

Opciones predeterminadas de Robocopy:/COPY:DAT /R:1000000 /W:30

Según lo confirmado por el archivo de registro o la ventana de comandos en ejecución robocopy c:source c:dest *


¿Robocopia o Robocopia /?

 /COPY:copyflag[s] : What to COPY (default is /COPY:DAT)
                      (copyflags : D=Data, A=Attributes, T=Timestamps
                       S=Security=NTFS ACLs, O=Owner info, U=aUditing info).

robocopy SOURCE DESTINATION FILE(S) /IS

Dónde IS representa Iincluir Same archivo (s). El uso de este interruptor hace que se sobrescriban los archivos existentes. Vea abajo:

::
:: File Selection Options :
::
                 /A :: copy only files with the Archive attribute set.
                 /M :: copy only files with the Archive attribute and reset it.
    /IA:[RASHCNETO] :: Include only files with any of the given Attributes set.
    /XA:[RASHCNETO] :: eXclude files with any of the given Attributes set.

 /XF file [file]... :: eXclude Files matching given names/paths/wildcards.
 /XD dirs [dirs]... :: eXclude Directories matching given names/paths.

                /XC :: eXclude Changed files.
                /XN :: eXclude Newer files.
                /XO :: eXclude Older files.
                /XX :: eXclude eXtra files and directories.
                /XL :: eXclude Lonely files and directories.
                /IS :: Include Same files.
                /IT :: Include Tweaked files.

  • Desafortunadamente, la documentación oficial no describe la lógica detrás que archivos son omitido por defecto.

  • Sin embargo, la documentación no oficial de ss64.com proporciona el puntero crucial (énfasis agregado):

    • Por defecto, Robocopy solo copiará un archivo si el origen y el destino tienen diferentes marcas de tiempo o diferentes tamaños de archivo.

Nota: sello de tiempo se refiere a última modificación sello de tiempo (solamente).

En otras palabras: Robocopy considera que dos archivos son los mismo basado solamente sobre si sus marcas de tiempo y tamaños de archivo modificados por última vez son idénticos y, por lo tanto, salta copiando en ese evento.

Por lo que puedo decir:

  • Este comportamiento es no afectado por la modificación qué aspectos de un archivo / directorio copiar (parámetros /copy / /dcopy)

    • Estos argumentos solo se aplican si RoboCopy ha considerado fundamentalmente que un archivo / directorio determinado necesita copiarse, basándose en la lógica de igualdad / inclusión.
  • Si quieres ampliar la detección de igualdad predeterminada (la misma marca de tiempo de la última modificación y el mismo tamaño de archivo) siguientes propiedades, utilizar el /it (Incluir retocado) opción:

    • expediente attributes (representado como A Para el /copy parámetro)
    • ACL (representado como S Para el /copy parámetro)
    • propiedad del archivo (representado como O Para el /copy parámetro)
    • información de auditoría (representada como U Para el /copy parámetro)
  • Parece que Robocopy ofrece no opción para detectar la similitud de los archivos en función de su contenido (que normalmente se implementa mediante una función hash criptográfica).
    Por lo tanto, en el evento raro que podría haber archivos con marcas de tiempo idénticas en la última modificación y tamaños de archivo idénticos que, no obstante, difieren en contenido, tu única opción es usar el /is (Incluir lo mismo) opción:

    • Esto hace que se copien los archivos que se consideran iguales. incondicionalmente – y por lo tanto potencialmente innecesariamente.

    • Consideración: Curiosamente, archivos que son iguales con respecto al tamaño de archivo y sello de archivo modificado por última vez pero difieren con respecto a la /it-propiedades relacionadas mencionadas anteriormente están no incluido por defecto con /is solo; por lo tanto, para cubrir todas las eventualidades, utilice /is y /itconjunto.


Las siguientes pruebas de Pester demuestran los comportamientos; guarda el código como Tests.ps1 e invocarlo como Invoke-Pester ./Tests.ps1:

Describe RoboCopySkippedFilesTests 
  BeforeAll 
    Push-Location TestDrive:
  
  AfterAll 
    Pop-Location
  
  BeforeEach 
    # Set up a source and a destination folder and make their
    # Content the same.
    if (Test-Path dest)  Remove-Item -Force -Recurse dest 
    $null = New-Item -Type Directory -Force src
    'file1' > srcfile1
    'file2' > srcfile2
    Copy-Item -Recurse src dest
  

  It "Does not copy anything with identical folders." 
    robocopy.exe src dest
    $LASTEXITCODE 
  It "Does recognize a changed last-modified filestamp"  Out-Host
    $LASTEXITCODE 
  It "Does recognize a change in file size" 
    '!' 
  It "Does not recognize a change in file content, with size and last-modified date identical"  Should Be 0
  
  It "Does not recognize a change in file attributes, with size and last-modified date identical" 
    (Get-Item destfile1).Attributes = 'System'
    robocopy.exe src dest # 
  It "Does recognize an attribute-modified-only file as tweaked (/IT)" 
    (Get-Item destfile1).Attributes = 'System'
    robocopy.exe src dest /IT # 
  It "Does not include an attribute-modified-only file with /IS"  Out-Host
    $LASTEXITCODE 

Debería ver algo como lo siguiente, que indica que todas las pruebas pasaron (a partir de Robocopy.exe con versión de archivo 10.0.16299.15 (WinBuild.160101.0800)):

Describing RoboCopySkippedFilesTests
 [+] Does not copy anything with identical folders. 231ms
 [+] Does recognize a changed last-modified filestamp 112ms
 [+] Does recognize a change in file size 68ms
 [+] Does not recognize a change in file content, with size and last-modified date identical 69ms
 [+] Does not recognize a change in file attributes, with size and last-modified date identical 83ms
 [+] Does recognize an attribute-modified-only file as tweaked (/IT) 65ms
 [+] Does not include an attribute-modified-only file with /IS 70ms
Tests completed in 589ms
Passed: 7 Failed: 0 Skipped: 0 Pending: 0 Inconclusive: 0

Comentarios y calificaciones

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *