【问题标题】:How to specify a date on azcopy如何在 azcopy 上指定日期
【发布时间】:2019-11-15 23:47:55
【问题描述】:

我正在尝试使用这个出色的工具azcopy 将 blob 从一个容器移动到另一个容器。 我的问题是我只需要复制过去 40 天内修改过的 blob。不应复制较旧的 blob。 是否可以指定一个参数来限制数据范围?

【问题讨论】:

    标签: azure azure-storage azcopy


    【解决方案1】:

    您可以尝试编写自己的程序来复制基于Azure Storage Data Movement Library 的 blob。这是一个专为高性能传输 Blob/File 设计的库。

    您可以参考this sample 了解如何复制 Blob 目录。 要仅复制过去 40 天内修改的 blob,可以使用 DirectoryTransferContext.ShouldTransferCallbackAsync() 来决定是否复制每个 blob。

                context.ShouldTransferCallbackAsync = async (source, destination) =>
                {
                    CloudBlob sourceBlob = source as CloudBlob;
                    if (sourceBlob != null)
                    {
                        if (sourceBlob.Properties.LastModified >= DateTime.Now.AddDays(-40))
                        {
                            return true;
                        }
                    }
                    return false;
                };
    

    【讨论】:

    • 这是否意味着 blob 传输必须通过客户端应用程序?
    • 调用 TransferManager.CopyDirectoryAsync() 时,如果将“isServiceCopy”设置为 true,则会在服务器端复制 blob 内容。无论如何,客户端将发送复制 blob 请求,并检查 blob 复制状态。
    【解决方案2】:

    没有参数(我知道)可以做到这一点。

    一种解决方案是编写一个程序,枚举过去 40 天内已更改的所有文件。然后使用该程序为要复制的每个 blob 生成一个 azcopy 命令。

    您可以使用本文中的代码作为起点。

    【讨论】:

    【解决方案3】:

    azcopy 现在有 --include-after 标志(和 --include-before)。

    来自docs:

    --include-after string 仅包含在给定日期/时间或之后修改的文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-04-01
      • 1970-01-01
      • 2021-07-14
      • 2013-12-08
      • 1970-01-01
      • 2021-08-27
      • 2012-12-16
      相关资源
      最近更新 更多