具有排除模式的Azure CLI存储删除批处理

时间:2018-08-29 05:55:23

标签: azure azure-storage azure-cli

请考虑以下清单(或任何存储数据):

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个备份。使用非批处理操作似乎不切实际。

3 个答案:

答案 0 :(得分:2)

我怀疑通配符有一种简单的方法(使用正则表达式很容易)。 [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

回答您的问题。我将重命名(复制)为backup-keep.archive,然后使用模式backup-2018-08-29-????.archive

删除其余备份

答案 1 :(得分:1)

您可以使用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"

enter image description here

它发出警告,但对我而言效果很好。

检查门户:

enter image description here

答案 2 :(得分:0)

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

#!/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-link-fs-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-link-fs-mongo.archive"

使用此脚本,我将删除除午夜(带有0000时间戳记)以外的所有备份。

相关问题