Пакет удаления хранилища CLI Azure с шаблоном исключения - PullRequest
0 голосов
/ 29 августа 2018

Рассмотрим этот список больших двоичных объектов (или любых данных для хранения):

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 .

- рисунок

Шаблон, используемый для выделения файлов или больших двоичных объектов в источнике. Поддерживаемые шаблоны: '*', '?', '[seq]' и '[! seq]'.

источник

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

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

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

Обновление

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

Ответы [ 3 ]

0 голосов
/ 29 августа 2018

Вы можете использовать Acquire lease большого двоичного объекта (на портале или использовать az storage blob lease acquire ), а затем использовать команду az storage blob delete-batch для удаления других больших двоичных объектов. Если вы арендуете большой двоичный объект, большой двоичный объект не может быть удален, если вы хотите удалить его, просто прервите аренду на портале или используйте 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

0 голосов
/ 30 августа 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-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).

0 голосов
/ 29 августа 2018

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

...