Пакетное удаление хранилища CLI Azure с шаблоном исключения

Рассмотрим этот список 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]'.

источник

Но я не могу найти информацию о том, как работают '*', '?', '[Seq]' и '[! Seq]'.

Какой шаблон в приведенной ниже команде захватит все файлы, кроме backup-2018-08-29-0000.archive?

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

Обновлять

Дополнительная проблема в том, что у меня есть около 10000 резервных копий, собранных более чем за год. Использование не-пакетных операций кажется непрактичным.


person Dmitry Shvetsov    schedule 29.08.2018    source источник


Ответы (3)


Я сомневаюсь, что есть простой способ сделать это с помощью подстановочных знаков (это было бы легко с регулярным выражением). [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

person Martin Brandl    schedule 29.08.2018
comment
Таким образом, знак ? - это один любой символ, а затем * - для одного или нескольких любых символов. Например, этот шаблон backup-2018-08-??-0000.archive будет соответствовать всем каплям со временем 0000 в любой день в пределах 08 месяца, а шаблон backup*.archive будет соответствовать любым файлам, которые начинаются с backup и .archive расширения? - person Dmitry Shvetsov; 29.08.2018
comment
Похоже, это единственное место в Интернете, где задокументированы [seq] и [!seq]! - person sparkplug; 29.03.2019

Вы можете использовать Acquire lease большого двоичного объекта (на портале или использовать _ 2_), а затем используйте команду az storage blob delete-batch для удаления других больших двоичных объектов. Если вы арендуете большой двоичный объект, он не может быть удален, если вы хотите удалить его, просто прервите аренду на портале или используйте _ 4_

Моя тестовая команда (время аренды указываю 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"

введите здесь описание изображения

Выдает предупреждение, но с моей стороны работает нормально.

Проверить на портале:

введите здесь описание изображения

person Joy Wang    schedule 29.08.2018
comment
Хорошая идея. Но насколько я знаю, команды для пакетной аренды нет, верно? - person Dmitry Shvetsov; 29.08.2018
comment
Я хочу зарезервировать чуть больше 400 - person Dmitry Shvetsov; 30.08.2018

Я решил проблему, выполнив две команды пакетного удаления:

#!/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).

person Dmitry Shvetsov    schedule 30.08.2018