具有排除模式的 Azure CLI 存储删除批处理
Azure CLI storage delete-batch with exclude pattern
考虑这个 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 flag.
--pattern
The pattern used for globbing files or blobs in the source. The
supported patterns are '*', '?', '[seq]', and '[!seq]'.
但我找不到有关“*”、“?”、“[seq]”和“[!seq]”如何工作的信息。
在下面的命令中,什么模式将占用除 backup-2018-08-29-0000.archive
之外的所有文件?
$ az storage blob delete-batch --source mycontainer --pattern <pattern>
更新
另一个问题是我在一年多的时间里收集了大约 10000 个备份。使用非批处理操作似乎不切实际。
我怀疑是否有一种简单的方法可以使用通配符来做到这一点(使用正则表达式会很容易)。
[seq]
和 [!seq]
是这样工作的:
--pattern backup-2018-08-29-[01]???.archive
将删除所有 29-
之后第一个数字为 0
或 1
的文件:
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
删除剩余的备份
您可以使用 blob 的 Acquire lease
(在门户中或使用 az storage blob lease acquire
), then use the command az storage blob delete-batch
to delete other blobs. If you lease the blob, the blob could not be deleted, if you want to delete it, just break the lease in the portal or use 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"
它给出了一个警告,但它在我这边工作正常。
登录门户:
我通过执行两个批量删除命令解决了这个问题:
#!/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
时间戳)。
考虑这个 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 flag.
--pattern
The pattern used for globbing files or blobs in the source. The supported patterns are '*', '?', '[seq]', and '[!seq]'.
但我找不到有关“*”、“?”、“[seq]”和“[!seq]”如何工作的信息。
在下面的命令中,什么模式将占用除 backup-2018-08-29-0000.archive
之外的所有文件?
$ az storage blob delete-batch --source mycontainer --pattern <pattern>
更新
另一个问题是我在一年多的时间里收集了大约 10000 个备份。使用非批处理操作似乎不切实际。
我怀疑是否有一种简单的方法可以使用通配符来做到这一点(使用正则表达式会很容易)。
[seq]
和 [!seq]
是这样工作的:
--pattern backup-2018-08-29-[01]???.archive
将删除所有 29-
之后第一个数字为 0
或 1
的文件:
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
您可以使用 blob 的 Acquire lease
(在门户中或使用 az storage blob lease acquire
), then use the command az storage blob delete-batch
to delete other blobs. If you lease the blob, the blob could not be deleted, if you want to delete it, just break the lease in the portal or use 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"
它给出了一个警告,但它在我这边工作正常。
登录门户:
我通过执行两个批量删除命令解决了这个问题:
#!/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
时间戳)。