Найдите, есть ли файл с нулевыми байтами в хранилище больших двоичных объектов

#azure #azure-storage #azure-blob-storage

Вопрос:

У меня есть контейнер больших двоичных объектов Azure с большим количеством файлов (миллионы). Мне нужно выяснить, есть ли какой-либо файл с размером файла 0 байт. Есть ли простой способ сделать это?

В случае, если это имеет какое-либо значение, к контейнеру не применяются никакие теги.

Комментарии:

1. Вам нужно будет перечислить все большие двоичные объекты в контейнере и выполнить фильтрацию на стороне клиента.

2. Вы ищете код для этого? Если нет, вы можете просто использовать Azure Storage Explorer и отсортировать по размеру большого двоичного объекта.

3. @Энди… Решение обозревателя хранилища не будет работать, так как оно извлекает максимум 5000 больших двоичных объектов / запрос (ограничение REST API), поэтому любая сортировка будет выполняться только для извлеченных больших двоичных объектов.

Ответ №1:

На всякий случай, если это может помочь кому-то еще, вот сценарий, который я написал в powershell:

 $ctx = New-AzStorageContext -StorageAccountName <AccountName> -StorageAccountKey <PrimaryKey>
$ContainerName = "containerName"
$MaxReturn = 10000
$loopCount = 0
$Total = 0
$Token = $Null

do {
  $Blobs = Get-AzStorageBlob -Context $ctx -Container $ContainerName -MaxCount $MaxReturn -ContinuationToken $Token

  $Total  = $Blobs.Count

  foreach ($blobitem in $Blobs) {
    $loopCount  = 1
    Write-Host -NoNewline "`rValidating batch: " $loopCount "/" $blobsList.Length " (Current total:" $Total ")"

    if ($blobitem.Length -eq 0) {
      Write-Host ""
      Write-Host "Zero bytes file found: " $blobitem.Name
    }
  }

  $loopCount = 0
  if ($Blobs.Length -le 0) { Break; }
  $Token = $Blobs[$blobs.Count - 1].ContinuationToken;
}
While ($Token -ne $Null)

Write-Host ""
Write-Host "Finished!"