当前位置: 首页 > 知识库问答 >
问题:

带Mir参数的Robocopy Maxage Minage

孙翰墨
2023-03-14

我正在从源到目标使用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" 

共有1个答案

朱高丽
2023-03-14

这看起来确实很奇怪,因为人们可能会认为您正在尝试使用MINAGE开关选择2019年1月1日之前的所有内容。然后将其与MIR开关或更具体地说是PURGE开关组合,以删除2019年1月1日之后的额外文件和目录。

这不起作用的原因是/MINAGE开关仅影响选择要复制的文件,即使/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

然后重新运行/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(跳过的):

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

这意味着参数只过滤掉了我们想要复制的内容。如果我们重置并清除目录,然后重新运行,我们可以更好地看到发生了什么:

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参数来仅确定我需要复制的文件,而不是我需要删除的文件。

这种行为的原因是因为MINAGE和相应的MAXAGE参数适用于具有慢速网络链接的超大目录或较小的目标计算机,我们通常只对复制某些文件集感兴趣(例如,仅复制昨天的新文件),而不必复制所有文件。在这些情况下,通常不执行或不需要镜像,因为文件集通常是“Delta”。

要突出显示copy over remove,请镜像目录,然后向目标添加两个额外文件,一个旧文件,一个新文件:

C:\Source         C:\Destination
                    File-2017.txt
 File-2018.txt      File-2018.txt
 File-2019.txt      File-2019.txt
                    File-2020.txt

然后重新运行Include Skipped 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是用于...良好的...镜像。其他参数只是告诉它要复制什么。

我们从副本中涉及的源文件开始:

C:\Source
 File-2018.txt
 File-2019.txt

我们通过包含跳过的/IS/MINAGE应用过滤:

C:\Source
 File-2018.txt    <- 1 files Copied
 File-2019.txt    <- 1 files Skipped

然后\MIRMirror命令执行并删除目标中未包含在源文件中的所有文件:

C:\Destination
 File-2017.txt    <- 2 files Extra
 File-2020.txt  

不管额外文件的年代如何

简单的解决方案是一开始就不要复制所有内容。从空目录开始,只复制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
 类似资料:
  • Mir

    Mir 是高性能的数学算法库和机器学习工具包,性能已经达到 Intel MKL 水平,远高于苹果公司的 Accelerate 和 OpenBLAS 等。 Mir 用于科学和机器学习的通用数值库。 其它 Mir 项目 Mir Random - 专业随机数生成器 Mir GLAS - 线性代数库 Mir CPUID - CPU 识别 基于 Mir 的开源项目 D编程语言的计算机视觉库

  • Mir 是一套提供类似gRPC服务开发体验的快速开发RESTful API后端开发脚手架,适配多种HTTP框架,包括 Gin , Chi , Hertz , Echo , Iris , Fiber, Macaron, Mux, httprouter 。   使用说明 生成样板项目 % go get github.com/alimy/mir/mirc/v3@latest% mirc new -hcr

  • 问题内容: 我使用以下代码从SQL Server表中进行选择: 它运行完美,但是我想防止SQL注入,所以我尝试使用: 当我尝试执行此操作时,SQL Server没有任何结果。 知道为什么吗? 问题答案: “为什么?” 这是因为很少有电影的名称中带有“ @Search”一词-即“ Indiana Jones and the Last @Search”。也许是《星际迷航3:@搜索Spock》。通过将其

  • Mir是由Canonical公司开发的Linux操作系统下的显示服务器。原本用以取代Ubuntu中的X窗口系统。,但是2017年4月Canonical公司宣布放弃开发Mir专用的显示后端服务,并改开发以Wayland作为显示后端的使用者界面。并于2017年10月,将原先发布的版本1.0 退回到版本 0.28 并大幅度的增加对于 wayland 的支援程度。 系统架构:  

  • Math-o-mir 仅仅 382k,是个强大的公式编辑器。截图还不能显示它的强大。在其官方网站还有个更牛的演示,画电路图,旁边标注满了公式。

  • 问题内容: 我是否可以使用一组参数启动 Java WebStart 应用程序,就像用标记配置了applet一样? 谢谢 问题答案: 是的,您可以看到以下示例: 显示向您传递参数“ -user = bob”和“ -pass = 8jkaiuasu”到应用程序。以标准方式获取参数。