带有 Mir 参数的 Robocopy Maxage Minage
Robocopy Maxage Minage with Mir Parameter
我正在使用从源到目标的 Robocopy。
以下将移动所有文件。
Step 1: robocopy c:\Source C:\Destination /MIR
现在,当我在步骤中执行第二个命令时,2019 年 1 月 1 日之前的任何内容都应该使用 /MIR 参数从目标中删除,但是这并没有发生(2019 年 1 月之后的文件仍然保留在文件夹中,而不是被删除/MIR 命令)。我将如何解决这个问题?删除 20190101 之前的任何内容?
Step 2: robocopy c:\Source C:\Destination /MIR /maxage:19000101 /minage:20190101"
这看起来确实很奇怪,因为人们会认为您正在尝试使用 /MINAGE
切换到 select 2019 年 1 月 1 日之前的所有内容。然后将其与 /MIR
开关,或更具体地说 /PURGE /E
开关,以删除 在 2019 年 1 月 1 日之后的额外文件和目录。
这不起作用的原因是 /MINAGE
开关仅影响 select 编辑为 [=112= 的文件]已复制,即使 /MIR
命令按预期工作。
假设我们有 2 个文件,其中 1 个早于 2019 年 1 月 1 日,一个较新。
C:\Source C:\Destination
File-2018.txt
File-2019.txt
当我们运行标准\MIR
命令时:
Robocopy.exe C:\Source C:\Destination /MIR
两个文件都按预期复制。
2 files Copied
C:\Source C:\Destination
File-2018.txt File-2018.txt
File-2019.txt File-2019.txt
如果我们向目的地添加一个额外的文件:
C:\Source C:\Destination
File-2018.txt File-2018.txt
File-2019.txt File-2019.txt
File-2020.txt
和re-run/MIR
命令:
Robocopy.exe C:\Source C:\Destination /MIR
我们如预期的那样,删除了额外的文件:
2 files Skipped
1 files Extras
C:\Source C:\Destination
File-2018.txt File-2018.txt
File-2019.txt File-2019.txt
对于 \MIR
命令,当我们添加一个 /MINAGE
参数时,认为我们要求保留 2019 年 1 月 1 日及更早的所有内容,其余的则保留:
Robocopy.exe C:\Source C:\Destination /MIR /MINAGE:20190101
我们得到了意想不到的结果:
2 files Skipped
C:\Source C:\Destination
File-2018.txt File-2018.txt
File-2019.txt File-2019.txt
为了更好地说明发生了什么,以及为什么它“跳过”文件,让我们添加另一个参数,包括 Skipped \IS
:
Robocopy.exe C:\Source C:\Destination /MIR /IS /MINAGE:20190101
我们得到:
1 files Copied
1 files Skipped
C:\Source C:\Destination
File-2018.txt File-2018.txt
File-2019.txt File-2019.txt
这意味着\MINAGE
参数只过滤我们想要的复制.如果我们重置并清除目录,然后 re-run 它,我们可以更好地看到发生了什么:
Remove-Item C:\Destination -Force
C:\Source C:\Destination
File-2018.txt
File-2019.txt
Robocopy.exe C:\Source C:\Destination /MIR /MINAGE:20190101
我们得到:
1 files Copied
1 files Skipped
C:\Source C:\Destination
File-2018.txt File-2018.txt
File-2019.txt
它复制了 Older 文件,而不是 Newer 文件。这意味着当它遍历源中的文件时,它使用 /MINAGE
参数仅找出 哪些 个文件我需要 copy 完了,不是我需要什么文件删除.
此行为的原因是因为 /MINAGE
和相应的 /MAXAGE
参数适用于具有慢速网络链接的非常大的目录或较小的目标计算机,我们通常只对复制感兴趣某些文件集(例如,只有昨天的新文件),并且不一定需要复制 所有 文件。大多数情况下,在这些情况下,通常不会执行或不需要镜像,因为文件集通常是“Delta”。
为了突出复制删除,如果镜像目录然后我们添加 2 个额外的文件,一个旧的和一个新的到 Destination:
C:\Source C:\Destination
File-2017.txt
File-2018.txt File-2018.txt
File-2019.txt File-2019.txt
File-2020.txt
和 re-run 包含已跳过 /IS
以便我们可以看到正在复制的内容:
Robocopy.exe C:\Source C:\Destination /MIR /IS /MINAGE:20190101
我们得到了一些令人惊讶的结果:
1 files Copied
1 files Skipped
2 files Extras
C:\Source C:\Destination
File-2018.txt File-2018.txt
File-2019.txt File-2019.txt
这突出表明 /MIR
是为了......好吧......镜像。其他参数只是告诉它 what 到 Copy.
我们从复制涉及的源文件开始:
C:\Source
File-2018.txt
File-2019.txt
我们通过 Include skipped /IS
和 /MINAGE
:
应用过滤
C:\Source
File-2018.txt <- 1 files Copied
File-2019.txt <- 1 files Skipped
然后执行 \MIR
镜像命令,从目标中删除所有 不包含在源中的文件文件:
C:\Destination
File-2017.txt <- 2 files Extra
File-2020.txt
不考虑Extra文件的年龄
简单的解决办法就是不要一开始就复制所有内容。从一个空目录开始,只复制小于 2019 年 1 月 1 日的文件:
Remove-Item C:\Destination -Force
Robocopy.exe C:\Source C:\Destination /E /MINAGE:20190101
编辑
改进后的方法(而不是先删除整个目录),您只需 运行 目标上的清理脚本即可首先从目标中删除早于 2019 年 1 月 1 日的项目:
#Cleanup younger files
Get-ChildItem C:\Destination -Recurse | Where { $_.LastWriteTime -gt (Get-Date '2019-01-01')} | Remove-Item -Force -Recurse -ErrorAction SilentlyContinue
#Mirror over new files
Robocopy.exe C:\Source C:\Destination /MIR /MINAGE:20190101
我正在使用从源到目标的 Robocopy。
以下将移动所有文件。
Step 1: robocopy c:\Source C:\Destination /MIR
现在,当我在步骤中执行第二个命令时,2019 年 1 月 1 日之前的任何内容都应该使用 /MIR 参数从目标中删除,但是这并没有发生(2019 年 1 月之后的文件仍然保留在文件夹中,而不是被删除/MIR 命令)。我将如何解决这个问题?删除 20190101 之前的任何内容?
Step 2: robocopy c:\Source C:\Destination /MIR /maxage:19000101 /minage:20190101"
这看起来确实很奇怪,因为人们会认为您正在尝试使用 /MINAGE
切换到 select 2019 年 1 月 1 日之前的所有内容。然后将其与 /MIR
开关,或更具体地说 /PURGE /E
开关,以删除 在 2019 年 1 月 1 日之后的额外文件和目录。
这不起作用的原因是 /MINAGE
开关仅影响 select 编辑为 [=112= 的文件]已复制,即使 /MIR
命令按预期工作。
假设我们有 2 个文件,其中 1 个早于 2019 年 1 月 1 日,一个较新。
C:\Source C:\Destination
File-2018.txt
File-2019.txt
当我们运行标准\MIR
命令时:
Robocopy.exe C:\Source C:\Destination /MIR
两个文件都按预期复制。
2 files Copied
C:\Source C:\Destination
File-2018.txt File-2018.txt
File-2019.txt File-2019.txt
如果我们向目的地添加一个额外的文件:
C:\Source C:\Destination
File-2018.txt File-2018.txt
File-2019.txt File-2019.txt
File-2020.txt
和re-run/MIR
命令:
Robocopy.exe C:\Source C:\Destination /MIR
我们如预期的那样,删除了额外的文件:
2 files Skipped
1 files Extras
C:\Source C:\Destination
File-2018.txt File-2018.txt
File-2019.txt File-2019.txt
对于 \MIR
命令,当我们添加一个 /MINAGE
参数时,认为我们要求保留 2019 年 1 月 1 日及更早的所有内容,其余的则保留:
Robocopy.exe C:\Source C:\Destination /MIR /MINAGE:20190101
我们得到了意想不到的结果:
2 files Skipped
C:\Source C:\Destination
File-2018.txt File-2018.txt
File-2019.txt File-2019.txt
为了更好地说明发生了什么,以及为什么它“跳过”文件,让我们添加另一个参数,包括 Skipped \IS
:
Robocopy.exe C:\Source C:\Destination /MIR /IS /MINAGE:20190101
我们得到:
1 files Copied
1 files Skipped
C:\Source C:\Destination
File-2018.txt File-2018.txt
File-2019.txt File-2019.txt
这意味着\MINAGE
参数只过滤我们想要的复制.如果我们重置并清除目录,然后 re-run 它,我们可以更好地看到发生了什么:
Remove-Item C:\Destination -Force
C:\Source C:\Destination
File-2018.txt
File-2019.txt
Robocopy.exe C:\Source C:\Destination /MIR /MINAGE:20190101
我们得到:
1 files Copied
1 files Skipped
C:\Source C:\Destination
File-2018.txt File-2018.txt
File-2019.txt
它复制了 Older 文件,而不是 Newer 文件。这意味着当它遍历源中的文件时,它使用 /MINAGE
参数仅找出 哪些 个文件我需要 copy 完了,不是我需要什么文件删除.
此行为的原因是因为 /MINAGE
和相应的 /MAXAGE
参数适用于具有慢速网络链接的非常大的目录或较小的目标计算机,我们通常只对复制感兴趣某些文件集(例如,只有昨天的新文件),并且不一定需要复制 所有 文件。大多数情况下,在这些情况下,通常不会执行或不需要镜像,因为文件集通常是“Delta”。
为了突出复制删除,如果镜像目录然后我们添加 2 个额外的文件,一个旧的和一个新的到 Destination:
C:\Source C:\Destination
File-2017.txt
File-2018.txt File-2018.txt
File-2019.txt File-2019.txt
File-2020.txt
和 re-run 包含已跳过 /IS
以便我们可以看到正在复制的内容:
Robocopy.exe C:\Source C:\Destination /MIR /IS /MINAGE:20190101
我们得到了一些令人惊讶的结果:
1 files Copied
1 files Skipped
2 files Extras
C:\Source C:\Destination
File-2018.txt File-2018.txt
File-2019.txt File-2019.txt
这突出表明 /MIR
是为了......好吧......镜像。其他参数只是告诉它 what 到 Copy.
我们从复制涉及的源文件开始:
C:\Source
File-2018.txt
File-2019.txt
我们通过 Include skipped /IS
和 /MINAGE
:
C:\Source
File-2018.txt <- 1 files Copied
File-2019.txt <- 1 files Skipped
然后执行 \MIR
镜像命令,从目标中删除所有 不包含在源中的文件文件:
C:\Destination
File-2017.txt <- 2 files Extra
File-2020.txt
不考虑Extra文件的年龄
简单的解决办法就是不要一开始就复制所有内容。从一个空目录开始,只复制小于 2019 年 1 月 1 日的文件:
Remove-Item C:\Destination -Force
Robocopy.exe C:\Source C:\Destination /E /MINAGE:20190101
编辑
改进后的方法(而不是先删除整个目录),您只需 运行 目标上的清理脚本即可首先从目标中删除早于 2019 年 1 月 1 日的项目:
#Cleanup younger files
Get-ChildItem C:\Destination -Recurse | Where { $_.LastWriteTime -gt (Get-Date '2019-01-01')} | Remove-Item -Force -Recurse -ErrorAction SilentlyContinue
#Mirror over new files
Robocopy.exe C:\Source C:\Destination /MIR /MINAGE:20190101