请考虑以下清单(或任何存储数据):
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]'。
但是我找不到有关'*','?','[seq]'和'[!seq]'的工作方式的信息。
在下面的命令中,哪种模式将占用backup-2018-08-29-0000.archive
以外的所有文件?
$ az storage blob delete-batch --source mycontainer --pattern <pattern>
另一个问题是,我在一年多的时间内收集了大约10000个备份。使用非批处理操作似乎不切实际。
答案 0 :(得分:2)
我怀疑通配符有一种简单的方法(使用正则表达式很容易)。
[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
回答您的问题。我将重命名(复制)为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"
它发出警告,但对我而言效果很好。
检查门户:
答案 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
时间戳记)以外的所有备份。