【问题标题】:Azure CLI storage delete-batch with exclude pattern具有排除模式的 Azure CLI 存储批量删除
【发布时间】:2018-08-29 05:55:22
【问题描述】:

考虑一下这个 blob 列表(或任何存储数据):

backup-2018-08-29-0000.archive
backup-2018-08-29-0100.archive
backup-2018-08-29-0200.archive
backup-2018-08-29-0300.archive
backup-2018-08-29-0400.archive
backup-2018-08-29-0500.archive
backup-2018-08-29-0600.archive
backup-2018-08-29-0700.archive
backup-2018-08-29-0800.archive
backup-2018-08-29-0900.archive
backup-2018-08-29-1000.archive
backup-2018-08-29-1100.archive
backup-2018-08-29-1200.archive
backup-2018-08-29-1300.archive
backup-2018-08-29-1400.archive
backup-2018-08-29-1500.archive
backup-2018-08-29-1600.archive
backup-2018-08-29-1700.archive
backup-2018-08-29-1800.archive
backup-2018-08-29-1900.archive
backup-2018-08-29-2000.archive
backup-2018-08-29-2100.archive
backup-2018-08-29-2200.archive
backup-2018-08-29-2300.archive

我想删除除一个以外的所有文件。所以我最初的想法是使用 --pattern 标志。

--模式

用于在源中通配文件或 blob 的模式。这 支持的模式有 '*'、'?'、'[seq]' 和 '[!seq]'。

source

但我找不到有关“*”、“?”、“[seq]”和“[!seq]”如何工作的信息。

在下面的命令中,什么模式会占用除backup-2018-08-29-0000.archive之外的所有文件?

$ az storage blob delete-batch --source mycontainer --pattern <pattern>

更新

另一个问题是我在一年多的时间里收集了大约 10000 个备份。使用非批处理操作似乎不切实际。

【问题讨论】:

    标签: azure azure-storage azure-cli


    【解决方案1】:

    我怀疑是否有使用通配符的简单方法(使用正则表达式会很容易)。 [seq][!seq] 是这样工作的:

    --pattern backup-2018-08-29-[01]???.archive
    

    将删除所有29- 之后的第一个数字为01 的文件:

    backup-2018-08-29-0000.archive
    backup-2018-08-29-0100.archive
    backup-2018-08-29-0200.archive
    backup-2018-08-29-0300.archive
    backup-2018-08-29-0400.archive
    backup-2018-08-29-0500.archive
    backup-2018-08-29-0600.archive
    backup-2018-08-29-0700.archive
    backup-2018-08-29-0800.archive
    backup-2018-08-29-0900.archive
    backup-2018-08-29-1000.archive
    backup-2018-08-29-1100.archive
    backup-2018-08-29-1200.archive
    backup-2018-08-29-1300.archive
    backup-2018-08-29-1400.archive
    backup-2018-08-29-1500.archive
    backup-2018-08-29-1600.archive
    backup-2018-08-29-1700.archive
    backup-2018-08-29-1800.archive
    backup-2018-08-29-1900.archive
    

    [!seq] 只是否定:

    --pattern backup-2018-08-29-[!01]???.archive
    

    这将删除:

    backup-2018-08-29-2000.archive
    backup-2018-08-29-2100.archive
    backup-2018-08-29-2200.archive
    backup-2018-08-29-2300.archive
    

    回答你的问题。我会将 blob 重命名(复制)为例如backup-keep.archive,然后使用backup-2018-08-29-????.archive模式删除剩余的备份

    【讨论】:

    • 所以? 符号是一个任意字符,然后* 是一个或多个任意字符。例如,此模式backup-2018-08-??-0000.archive 将匹配08 月内任何一天时间为0000 的所有blob,而模式backup*.archive 将匹配以backup.archive 扩展名开头的任何文件?
    • 这似乎是互联网上唯一记录了[seq][!seq] 的地方!
    【解决方案2】:

    您可以使用 blob 的 Acquire lease(在门户中或使用 az storage blob lease acquire ),然后使用命令 az storage blob delete-batch 删除其他 blob。如果您租用 blob,则无法删除 blob,如果要删除它,只需在门户中打破租约或使用 az storage blob lease break

    我的测试命令(我指定租约的持续时间为 15 秒):

    az storage blob lease acquire --blob-name "azureProfile.txt"--container-name "testdel" --account-key "accountkey" --account-name "storagename" --lease-duration "15"
    az storage blob delete-batch --source "testdel" --account-key "accountkey" --account-name "storagename"
    

    它会发出警告,但对我来说效果很好。

    检查门户:

    【讨论】:

    • 好主意。但据我所知,没有批量租赁的命令,对吧?
    • 400多一点我要预定
    【解决方案3】:

    我通过执行两个批量删除命令解决了这个问题:

    #!/bin/bash
    
    set -e
    
    # AZURE_CONNECTION_STRING has taken from env
    CONTAINER=backups
    DATES="201[78]-??-??"
    
    # delete blobs with a range of 1000-2300 timestamps    
    az storage blob delete-batch \
      --connection-string $AZURE_CONNECTION_STRING \
      --source $CONTAINER \
      --pattern "$DATES-[1-2][0-9]00--mongo.archive"
    
    # delete blobs with a range of 0100-0900 timestamps
    az storage blob delete-batch \
      --connection-string $AZURE_CONNECTION_STRING \
      --source $CONTAINER \
      --pattern "$DATES-0[1-9]00--mongo.archive"
    

    使用此脚本,我将删除所有备份,不包括在午夜创建的备份(带有0000 时间戳)。

    【讨论】:

      猜你喜欢
      • 2021-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-03
      • 1970-01-01
      • 2020-01-02
      • 2021-11-08
      • 1970-01-01
      相关资源
      最近更新 更多