J'ai lu (quelque part) que Robocopy ignore la copie des fichiers existants par défaut.
Mais ... je ne trouve pas de commutateur de ligne de commande pour cela.
robocopy SOURCE DESTINATION FILE(S) /IS
Où IS
signifie I nclude S fichier ame ( s). L'utilisation de ce commutateur entraîne le remplacement des fichiers existants. Voir ci-dessous:
::
:: 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.
Malheureusement, la documentation officielle ne décrit pas la logique derrièrequels fichiers sont ignorés par défaut.
La documentation non officielle de ss64.com , cependant, fournit le pointeur essentiel (accentuation ajoutée):
Par défaut, Robocopy ne copie un fichier que si la source et la destination ontdes horodatages différents ou des tailles de fichier différentes.
Remarque: horodatage fait référence au dernière modification horodatage(uniquement).
En d'autres termes:Robocopy considère que deux fichiers sont le identiques basés seulement si leurs horodatages modifiés en dernier lieu et la taille des fichiers sont identiques et par conséquent saute copier dans cet événement.
D'après ce que je peux dire:
Ce comportement est not affecté par la modification des aspects d’un fichier/répertoire en copy (paramètres /COPY
/DCOPY
).
Si vous souhaitez étendre la détection de similitude par défaut(même horodatage modifié en dernier et même taille de fichier) aux propriétéssuivantes, utilisez le/IT
( Include Tweaked )option:
A
pour le paramètre/COPY)S
pour le paramètre /COPY
)O
pour le paramètre /COPY
)U
pour le paramètre /COPY
)Robocopy semble proposer des options no pour détecter la similitude des fichiers en fonction de leur contenu (qui est généralement implémenté via un fonction de hachage cryptographique ).
Par conséquent, dansévénement rare, il pourrait y avoirdes fichiers avec des horodatages de dernière modification identiques et des tailles de fichier identiques qui diffèrent néanmoins par content , votre seule option est d'utiliser l'option/IS
( Include Same ):
Cela entraîne la copie des fichiers considérés comme identiques inconditionnellement - et donc potentiellement inutilement.
Caveat: Curieusement, les fichiers identiques par rapport à la dernière modification de tampon et à la taille du fichier mais diffèrent par rapport aux propriétés mentionnées ci-dessus are not inclus par défaut avec /IS
seul; Par conséquent,pour couvrir toutes les éventualités, utilisez /IS
et /IT
combiné .
Les tests suivants de Pester démontrent les comportements; enregistrez le code en tant que Tests.ps1
et appelez-le en tant que 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' > src\file1
'file2' > src\file2
Copy-Item -Recurse src dest
}
It "Does not copy anything with identical folders." {
robocopy.exe src dest
$LASTEXITCODE | Should Be 0
}
It "Does recognize a changed last-modified filestamp" {
(gi src\file1).LastWriteTime = [datetime]::now
robocopy.exe src dest # | Out-Host
$LASTEXITCODE | Should Be 1
}
It "Does recognize a change in file size" {
'!' | Add-Content dest\file1
robocopy.exe src dest # | Out-Host
$LASTEXITCODE | Should Be 1
}
It "Does not recognize a change in file content, with size and last-modified date identical" {
'file!' > dest\file1
(Get-Item dest\file1).LastWriteTime = (Get-Item src\file1).LastWriteTime
robocopy.exe src dest # | Out-Host
$LASTEXITCODE | Should Be 0
}
It "Does not recognize a change in file attributes, with size and last-modified date identical" {
(Get-Item dest\file1).Attributes = 'System'
robocopy.exe src dest # | Out-Host
$LASTEXITCODE | Should Be 0
}
It "Does recognize an attribute-modified-only file as tweaked (/IT)" {
(Get-Item dest\file1).Attributes = 'System'
robocopy.exe src dest /IT # | Out-Host
$LASTEXITCODE | Should Be 1
}
It "Does not include an attribute-modified-only file with /IS" {
Remove-Item src\file2, dest\file2
(Get-Item dest\file1).Attributes = 'System'
robocopy.exe src dest /IS # | Out-Host
$LASTEXITCODE | Should Be 0
}
}
Vous devriez voir quelque chose comme ce qui suit, indiquant que tous les tests ont été réussis (à partir de Robocopy.exe
avec la version de fichier 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
Par défaut, Robocopy ignore la copie des fichiers existants si les métadonnées spécifiques des fichiers correspondent, puis ces fichiers seront ignorés lors de la copie.
Comme indiqué par @ mklement0 , la valeur implicite par défaut /COPY:DAT
ne copie pas les fichiers contenant des données différentes si l'horodatage [LastWriteTime] et la taille du fichier sont identiques et c'est donc un saut par défaut.
Ainsi, si, pour une raison quelconque, vous synchronisez deux fichiers dont la taille, le nom de fichier et les derniers attributs modifiés sont identiques, même si les données sont différentes, le fichier source ne sera pas copié.
Robocopy Options par défaut:
/DCOPY:DA /COPY:DAT /R:3 /W:1
/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).