Share via


Azure CLI ile blok bloblarını yönetme

Blob depolama blok blobları, ekleme bloblarını ve sayfa bloblarını destekler. Blok blobları, büyük miktarda veriyi verimli bir şekilde karşıya yüklemek için iyileştirilmiştir. Blok blobları görüntüleri, belgeleri ve rastgele okuma ve yazma işlemlerine tabi olmayan diğer veri türlerini depolamak için idealdir. Bu makalede blok bloblarıyla çalışma açıklanmaktadır.

Önkoşullar

Azure Depolama erişmek için bir Azure aboneliğiniz olmalıdır. Henüz aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.

Azure Depolama erişimi bir depolama hesabı üzerinden gerçekleştirilir. Bu hızlı başlangıç için Azure portalını, Azure PowerShell'i veya Azure CLI'yı kullanarak bir depolama hesabı oluşturun. Depolama hesabı oluşturma konusunda yardım için bkz . Depolama hesabı oluşturma.

Ortamınızı Azure CLI’ye hazırlama

  • Azure Cloud Shell'de Bash ortamını kullanın. Daha fazla bilgi için bkz . Azure Cloud Shell'de Bash için hızlı başlangıç.

  • CLI başvuru komutlarını yerel olarak çalıştırmayı tercih ediyorsanız Azure CLI'yı yükleyin . Windows veya macOS üzerinde çalışıyorsanız Azure CLI’yi bir Docker kapsayıcısında çalıştırmayı değerlendirin. Daha fazla bilgi için bkz . Docker kapsayıcısında Azure CLI'yi çalıştırma.

    • Yerel yükleme kullanıyorsanız az login komutunu kullanarak Azure CLI ile oturum açın. Kimlik doğrulama işlemini tamamlamak için terminalinizde görüntülenen adımları izleyin. Diğer oturum açma seçenekleri için bkz . Azure CLI ile oturum açma.

    • İstendiğinde, ilk kullanımda Azure CLI uzantısını yükleyin. Uzantılar hakkında daha fazla bilgi için bkz. Azure CLI ile uzantıları kullanma.

    • Yüklü sürümü ve bağımlı kitaplıkları bulmak için az version komutunu çalıştırın. En son sürüme yükseltmek için az upgrade komutunu çalıştırın.

  • Bu makale, Azure CLI'nın 2.0.46 veya sonraki bir sürümünü gerektirir. Azure Cloud Shell kullanılıyorsa en son sürüm zaten yüklüdür.

Blob depolamaya erişimi yetkilendirme

Azure CLI'dan Blob depolamaya erişimi Microsoft Entra kimlik bilgileriyle veya bir depolama hesabı erişim anahtarı kullanarak yetkileyebilirsiniz. Microsoft Entra kimlik bilgilerinin kullanılması önerilir ve bu makalenin örneklerinde yalnızca Microsoft Entra Kimliği kullanılır.

Blob depolamaya karşı veri işlemleri için Azure CLI komutları, belirli bir işlemin nasıl yetkilendirileceğini belirtmenize olanak tanıyan parametresini destekler --auth-mode . --auth-mode Microsoft Entra kimlik bilgileriyle yetkilendirmek için oturum açmak için parametresini ayarlayın. Yalnızca Blob depolama veri işlemleri parametresini --auth-mode destekler. Kaynak grubu veya depolama hesabı oluşturma gibi yönetim işlemleri, yetkilendirme için otomatik olarak Microsoft Entra kimlik bilgilerini kullanır. Daha fazla bilgi için bkz . Azure CLI ile blob verilerine erişimi yetkilendirmeyi seçme.

login Tarayıcıyı açmak ve Azure aboneliğinize bağlanmak için komutunu çalıştırın.


az login

Kapsayıcı oluşturma

Tüm blob verileri kapsayıcılar içinde depolandığından, verileri karşıya yükleyebilmeniz için en az bir kapsayıcı kaynağına ihtiyacınız vardır. Gerekirse, depolama kapsayıcısı oluşturmak için aşağıdaki örneği kullanın. Daha fazla bilgi için bkz . Azure CLI kullanarak blob kapsayıcılarını yönetme.


#!/bin/bash
storageAccount="<storage-account>"
containerName="demo-container"

# Create a container object
az storage container create \
    --name $containerName \
    --account-name $storageAccount
    --auth-mode login

Bu makalede yer alan örnekleri kullandığınızda köşeli ayraç içindeki yer tutucu değerlerini kendi değerlerinizle değiştirmeniz gerekir. Azure CLI ile Azure'da oturum açma hakkında daha fazla bilgi için bkz . Azure CLI ile oturum açma.

Blobları karşıya yükleme

Azure CLI, gereksinimlerinize bağlı olarak tek bir kaynakta veya birden çok kaynakta işlem gerçekleştiren komutlar sunar.

Bir dosyayı blok bloba yüklemek için gerekli parametre değerlerini komutuna az storage blob upload geçirin. kaynak yolunu ve dosya adını parametresiyle --file ve hedef kapsayıcının adını parametresiyle sağlayın --container-name . Parametresini --account-name de sağlamanız gerekir. Bu komut yeni bir blob oluşturur veya zaten varsa özgün blobun üzerine yazar.

Komutunu kullanarak az storage blob upload-batch bir depolama kapsayıcısına özyinelemeli olarak birden çok blob yükleyebilirsiniz. Unix dosya adı desen eşleştirmesini parametresiyle --pattern karşıya yüklenecek dosya aralığını belirterek kullanabilirsiniz. Desteklenen desenler , ?, [seq]ve [!seq]şeklindedir*. Daha fazla bilgi edinmek için Unix dosya adı desen eşleştirme ile ilgili Python belgelerine bakın.

Aşağıdaki örnekte, ilk işlem komutunu kullanarak az storage blob upload tek bir adlandırılmış dosyayı karşıya yükler. Kaynak dosya ve hedef depolama kapsayıcısı --file ve --container-name parametreleriyle belirtilir.

İkinci işlem, birden çok dosyayı karşıya yüklemek için komutunun az storage blob upload-batch kullanımını gösterir. --if-modified-since parametresi yalnızca son yedi gün içinde değiştirilen dosyaların karşıya yüklenmesini sağlar. Bu parametre tarafından sağlanan değer UTC biçiminde sağlanmalıdır.


#!/bin/bash
storageAccount="<storage-account>"
containerName="demo-container"
lastModified=`date -d "7 days ago" '+%Y-%m-%dT%H:%MZ'`

path="C:\\temp\\"
filename="demo-file.txt"
imageFiles="*.png"
file="$path$filename"

#Upload a single named file
az storage blob upload \
    --file $file \
    --container-name $containerName \
    --account-name $storageAccount \
    --auth-mode login

#Upload multiple image files recursively
az storage blob upload-batch \
    --destination $containerName \
    --source $path \
    --pattern *.png \
    --account-name $storageAccount \
    --auth-mode login \
    --if-modified-since $lastModified

Blobları listeleme

Varsayılan olarak, az storage blob list komut bir kapsayıcıda depolanan tüm blobları listeler. Aramanızın kapsamını daraltmak için çeşitli yaklaşımlar kullanabilirsiniz. Depolama hesabının sahip olabileceği kapsayıcı veya blob sayısıyla ilgili bir kısıtlama yoktur. Binlerce blobun alınmasını önlemek için döndürülen veri miktarını sınırlamak iyi bir fikirdir.

--prefix Bilinen tek bir dosyayı veya adları tanımlı bir dizeyle başlayan dosya aralığını seçmek için parametresini kullanın.

Varsayılan olarak, listeleme işleminde yalnızca bloblar döndürülür. Bazı senaryolarda, geçici olarak silinen bloblar, anlık görüntüler ve sürümler gibi ek nesne türlerini döndürmek için parametresi için --include bir değer geçirmek isteyebilirsiniz. Bu değerler birden çok nesne türü döndürmek için birleştirilebilir.

parametresi, --num-results bir kapsayıcıdan döndürülen filtrelenmemiş blob sayısını sınırlamak için kullanılabilir. Tüm Azure kaynaklarına 5.000 hizmet sınırı uygulanır. Bu sınır, yönetilebilir miktarda veri alınmasını ve performansın etkilenmemesini sağlar. Döndürülen blob sayısı değeri veya hizmet sınırını aşarsa --num-results , devam belirteci döndürülür. Bu belirteç, istediğiniz sayıda blobu almak için birden çok istek kullanmanıza olanak tanır. Blob kaynaklarını numaralandırma hakkında daha fazla bilgi sağlanır.

Aşağıdaki örnekte blobların listesini sağlamak için kullanılan çeşitli yaklaşımlar gösterilmektedir. İlk yaklaşımda belirli bir kapsayıcı kaynağı içindeki tek bir blob listelenir. İkinci yaklaşım, louis ön ekine --prefix sahip tüm kapsayıcılardaki tüm blobları listelemek için parametresini kullanır. Arama, parametresi kullanılarak beş kapsayıcıyla --num-results sınırlıdır. Üçüncü yaklaşım, kapsayıcı içindeki tüm blobların alınmasını sınırlamak için ve --marker parametrelerini kullanır--num-results.

Ek bilgi için az storage blob list başvurusuna bakın.


#!/bin/bash
storageAccount="<storage-account>"
blobName="demo-file.txt"
containerName="demo-container"
blobPrefix="img-louis"
numResults=5

#Approach 1: List all blobs in a named container
az storage blob list \
    --container $containerName \
    --account-name $storageAccount \
    --prefix $blobName
    --auth-mode login

#Approach 2: Use the --prefix parameter to list blobs in all containers

containerList=$( \
    az storage container list \
        --query "[].name" \
        --num-results $numResults \
        --account-name $storageAccount \
        --auth-mode login \
        --output tsv 
)
for row in $containerList
do
    tmpName=$(echo $row | sed -e 's/\r//g')
    echo $tmpName
    az storage blob list \
        --prefix $blobPrefix \
        --container $tmpName \
        --account-name $storageAccount \
        --auth-mode login
done

Blobu indirme

Kullanım örneğine bağlı olarak blobları indirmek için veya az storage blob download-batch komutunu kullanacaksınızaz storage blob download. Tek bir blobu indirmek için komutunu doğrudan çağırın az storage blob download ve , --fileve --name parametrelerinin --container-namedeğerlerini geçirin. Blob varsayılan olarak kabuk dizinine indirilir, ancak alternatif bir konum belirtilebilir. Belirtilen yolunuz yoksa işlem bir hatayla başarısız olur.

Bir depolama kapsayıcısından yinelemeli olarak birden çok blob indirmek için komutunu kullanın az storage blob download-batch . Bu komut, parametresiyle eşleşen Unix dosya adı desenini --pattern destekler. Desteklenen desenler , ?, [seq]ve [!seq]şeklindedir*. Daha fazla bilgi edinmek için Unix dosya adı desen eşleştirme ile ilgili Python belgelerine bakın.

Aşağıdaki örnek kod, hem tek hem de birden çok indirme yaklaşımının bir örneğini sağlar. Ayrıca joker karakter kullanarak tüm kapsayıcılarda belirli dosyaları aramak için basitleştirilmiş bir yaklaşım sunar. Bazı ortamlarda binlerce kaynak olabileceğinden parametresini --num-results kullanmanız önerilir.

Ek bilgi için az storage blob download ve az storage blob download batchbaşvurusuna bakın.

#!/bin/bash
#Set variables
storageAccount="<storage-account>"
containerName="demo-container"

destinationPath="C:\\temp\\downloads\\"
destinationFilename="downloadedBlob.txt"
file="$destinationPath$destinationFilename"
sourceBlobName="demo-file.txt"

#Download a single named blob

az storage blob download \
    --container $containerName \
    --file $file \
    --name $sourceBlobName \
    --account-name $storageAccount \
    --auth-mode login

#Download multiple blobs using a pattern value

az storage blob download-batch \
    --destination $destinationPath \
    --source $containerName \
    --pattern images/*.png \
    --account-name $storageAccount \
    --auth-mode login

#Use a loop to download matching blobs in a list of containers

containerList=$( \
    az storage container list \
        --query "[].name" \
        --num-results 5 \
        --account-name $storageAccount \
        --auth-mode login \
        --output tsv 
)
for row in $containerList
do
    tmpName=$(echo $row | sed -e 's/\r//g')
    echo $tmpName
   
    az storage blob download-batch \
        --destination $destinationPath \
        --source $tmpName \
        --pattern *louis*.* \
        --account-name $storageAccount \
        --auth-mode login
done

Blob özelliklerini ve meta verilerini yönetme

Blob hem sistem özelliklerini hem de kullanıcı tanımlı meta verileri kullanıma sunar. Her Blob Depolama kaynağında sistem özellikleri vardır. Bazı özellikler salt okunurken, diğerleri okunabilir veya ayarlanabilir. Bazı sistem özellikleri, kapakların altında belirli standart HTTP üst bilgileriyle eşleniyor.

Kullanıcı tanımlı meta veriler, Blob Depolama kaynağı için belirttiğiniz bir veya daha fazla ad-değer çiftini içerir. Kaynakla birlikte ek değerleri depolamak için meta verileri kullanabilirsiniz. Meta veri değerleri kendi amaçlarınıza yöneliktir ve kaynağın davranışını etkilemez.

Blob özelliklerini okuma

Blob özelliklerini veya meta verilerini okumak için önce blobu hizmetten almanız gerekir. blob'un az storage blob show özelliklerini ve meta verilerini almak için komutunu kullanın, ancak içeriğini almayın. Aşağıdaki örnek bir blobu alır ve özelliklerini listeler.

Ek bilgi için az storage blob show başvurusuna bakın.

#!/bin/bash
#Set variables
storageAccount="<storage-account>"
containerName="demo-container"

az storage blob show \
    --container  demo-container \
    --name demo-file.txt \
    --account-name $storageAccount \
    --auth-mode login

Blob meta verilerini okuma ve yazma

Blob meta verileri, blobla ilişkilendirilmiş isteğe bağlı bir ad/değer çifti kümesidir. Önceki örnekte gösterildiği gibi, başlangıçta bir blobla ilişkilendirilmiş meta veri yoktur, ancak gerektiğinde eklenebilir. Okumak için komutunu kullanın az storage blob metadata show . Blob meta verilerini güncelleştirmek için bir dizi anahtar-değer çifti kullanacak az storage blob metadata update ve sağlayacaksınız. Daha fazla bilgi için az storage blob meta veri başvurusuna bakın.

Ek bilgi için az storage blob meta veri başvurusuna bakın.

Aşağıdaki örnek önce bir blob'un meta verilerini güncelleştirir ve işler ve ardından alır.

#!/bin/bash
storageAccount="<storage-account>"
containerName="demo-container"
blobName="blue-moon.mp3"

metadata=("Written=1934" "Recorded=1958")
metadata+=("Lyricist=Lorenz Hart")
metadata+=("Composer=Richard Rogers")
metadata+=("Artist=Tony Bennett")

#Update metadata
az storage blob metadata update \
    --container-name $containerName \
    --name $blobName \
    --metadata "${metadata[@]}" \
    --account-name $storageAccount \
    --auth-mode login

#Retrieve updated blob metadata
az storage blob metadata show \
    --container-name $containerName \
    --name $blobName \
    --account-name $storageAccount \
    --auth-mode login

Bloblar için kopyalama işlemleri

Farklı türlerdeki blobların kopyalanabileceği birçok senaryo vardır. Bu makaledeki örnekler blok bloblarıyla sınırlıdır. Azure CLI, gereksinimlerinize bağlı olarak tek bir kaynakta veya birden çok kaynakta işlem gerçekleştiren komutlar sunar.

Belirli bir blobu kopyalamak için komutunu kullanın az storage blob copy start ve kaynak ve hedef kapsayıcılar ile bloblar için değerleri belirtin. Kaynak olarak tekdüzen bir kaynak tanımlayıcısı (URI), paylaşım veya paylaşılan erişim imzası (SAS) sağlamak da mümkündür.

Blob'un hangi koşullarda kopyalanacağı da belirtebilirsiniz. Bu koşullar kaynak veya hedef blob için ayarlanabilir. Son değiştirme tarihine, etiket verilerine veya ETag değerine başvurabilirsiniz. Örneğin, yakın zamanda değiştirilmemiş blobları ayrı bir kapsayıcıya kopyalamayı seçebilirsiniz. Daha fazla bilgi için bkz . Blob hizmeti işlemleri için koşullu üst bilgileri belirtme.

komutunu kullanarak az storage blob copy start-batch aynı depolama hesabı içindeki depolama kapsayıcıları arasında yinelemeli olarak birden çok blob kopyalayabilirsiniz. Bu komut ve --destination-container parametreleri için --source-container değerler gerektirir ve tüm dosyaları kaynak ile hedef arasında kopyalayabilir. Diğer CLI toplu iş komutları gibi, bu komut da parametresiyle eşleşen Unix dosya adı desenini --pattern destekler. Desteklenen desenler , ?, [seq]ve [!seq]şeklindedir*. Daha fazla bilgi edinmek için Unix dosya adı desen eşleştirme ile ilgili Python belgelerine bakın.

Not

Özellikle depolama hesapları arasında blob kopyalarken kolaylık ve performans için AzCopy kullanımını göz önünde bulundurun. AzCopy, bir depolama hesabına iki yönlü blob veya dosya kopyalama işlemi gerçekleştirmenizi sağlayan bir komut satırı yardımcı programıdır. AzCopy'yi kullanmaya başlama hakkında daha fazla bilgi edinin.

Daha fazla bilgi için az storage blob copy başvurusuna bakın.

Aşağıdaki örnek kod, hem tek hem de birden çok kopyalama işlemi örneği sağlar. Bazı ortamlarda binlerce kaynak olabileceğinden parametresini --num-results kullanmanız önerilir. İlk örnek, secret-town-road.png blobunu fotoğraflar kapsayıcısından locations kapsayıcısına kopyalar. Her iki kapsayıcı da aynı depolama hesabında bulunur. Sonuç, kopyalama işleminin başarısını doğrular.

#!/bin/bash
storageAccount="<storage-account>"
sourceContainer="photos"
blobName="secret-town-road.jpg"
destContainer="locations"

az storage blob copy start \
    --destination-container $destContainer \
    --destination-blob $blobName \
    --source-container $sourceContainer \
    --source-blob $blobName \
    --account-name $storageAccount \
    --auth-mode login

Anlık görüntü blobları

Temel blob ile ilişkili kiralar anlık görüntüyü etkilemez. Anlık görüntüde kiralama alamazsınız. Blob anlık görüntüleri hakkında daha fazla bilgi edinin. Daha fazla bilgi için az storage blob snapshot başvurusuna bakın.

Aşağıdaki örnek kod, depolama kapsayıcısından bir blob alır ve bunun anlık görüntüsünü oluşturur.

#!/bin/bash
storageAccount="<storage-account>"
containerName="demo-container"
blobName="demo-file.txt"

az storage blob snapshot \
    --container-name $containerName \
    --name Blue-Moon.mp3 \
    --account-name $storageAccount \
    --auth-mode login

Blob katmanını ayarlama

Bir blobun katmanını değiştirdiğinizde, blobu ve tüm verilerini hedef katmana taşırsınız. Sık erişimli, seyrek erişimli ve arşiv arasındaki katmanı komutuyla az storage blob set-tier değiştirebilirsiniz.

Gereksinimlerinize bağlı olarak, blobu bir katmandan diğerine kopyalamak için Blobu Kopyala işlemini de kullanabilirsiniz. Blobu Kopyala işlemi istenen katmanda yeni bir blob oluştururken kaynak blob özgün katmanda kalır.

Katmanları seyrek erişimli veya sık erişimlidenarşive değiştirme neredeyse hemen gerçekleşir. Blob arşiv katmanına taşındıktan sonra çevrimdışı olduğu kabul edilir ve okunamaz veya değiştirilemez. Arşivlenmiş blob verilerini okuyabilmeniz veya değiştirebilmeniz için önce çevrimiçi bir katmanda yeniden doldurmanız gerekir. Arşiv katmanından Blob yeniden doldurma hakkında daha fazla bilgi edinin.

Ek bilgi için bkz . az storage blob set-tier başvurusu.

Aşağıdaki örnek kod, kapsayıcı içindeki tek bir adlandırılmış blob için katmanı sık erişimliarchive olarak ayarlar.

#!/bin/bash
storageAccount="<storage-account>"
containerName="demo-container"

az storage blob set-tier 
    --container-name $containerName \
    --name Blue-Moon.mp3 \
    --tier Hot \
    --account-name $storageAccount \
    --auth-mode login

Blob etiketlerini kullanan işlemler

Blob dizin etiketleri, veri yönetimini ve bulmayı kolaylaştırır. Blob dizini etiketleri, bloblarınıza uygulayabileceğiniz kullanıcı tanımlı anahtar-değer dizini öznitelikleridir. Yapılandırıldıktan sonra, tek bir kapsayıcı içindeki veya tüm kapsayıcılardaki nesneleri kategorilere ayırabilir ve bulabilirsiniz. Blob kaynakları, kapsayıcı kuruluşunda değişiklik gerektirmeden dizin etiketleri güncelleştirilerek dinamik olarak kategorilere ayırılabilir. Bu yaklaşım, değişen veri gereksinimleriyle başa çıkmak için esnek bir yol sunar. Hem meta verileri hem de dizin etiketlerini aynı anda kullanabilirsiniz. Dizin etiketleri hakkında daha fazla bilgi için bkz . Blob dizin etiketleriyle Azure Blob verilerini yönetme ve bulma.

İpucu

Aşağıda sağlanan kod örneği, bilinen bir yapıya sahip bir XML dosyasından metin almak için desen eşleştirmeyi kullanır. Örnek, temel Bash işlevselliğini kullanarak blob etiketleri eklemeye yönelik basitleştirilmiş bir yaklaşımı göstermek için kullanılır. Üretim iş yükleri için veri kullanılırken her zaman gerçek bir veri ayrıştırma aracının kullanılması önerilir.

Aşağıdaki örnekte blob dizini etiketlerinin bir dizi bloba nasıl ekleneceği gösterilmektedir. Örnek bir XML dosyasındaki verileri okur ve birkaç blobda dizin etiketleri oluşturmak için kullanır. Örnek kodu kullanmak için C:\temp dizininizde yerel bir blob-list.xml dosyası oluşturun. XML verileri aşağıda verilmiştir.

Ek bilgi için bkz . az storage blob set-tier başvurusu.

<Venue Name="House of Prime Rib" Type="Restaurant">
  <Files>
    <File path="transactions/12027121.csv" />
    <File path="campaigns/radio-campaign.docx" />
    <File path="photos/bannerphoto.png" />
    <File path="archive/completed/2020review.pdf" />
    <File path="logs/2020/01/01/logfile.txt" />
  </Files>
</Venue>

Örnek kod, XML dosyasındaki satırları yineler. Venue öğesini bulur ve Ad ve Tür değerleri için değişkenler oluşturur. Daha sonra kalan satırlarda yinelenir ve bir File düğüm tarafından başvuruldu her blob için etiketler oluşturur.

#!/bin/bash
storageAccount="<storage-account>"
containerName="demo-container"

while read line
do
  
#Set Tag values 
if echo "$line" | grep -q "<Venue";then
    name=`echo "$line" | cut -d'"' -f 2`
    type=`echo "$line" | cut -d'"' -f 4`
    tags=("name=$name")
    tags+=("type=$type")
fi

#Add tags to blobs
if echo "$line" | grep -q "<File ";then
    blobName=`echo "$line" | cut -d'"' -f 2`
    
    echo az storage blob tag set \
        --container-name $containerName \
        --name $blobName \
        --account-name $storageAccount \
        --auth-mode login \
        --tags "{$tags[@]}"
fi

done < /mnt/c/temp/bloblist.xml

Blob’ları silme

ve az storage blob delete-batch komutlarıyla tek bir blobu veya bir dizi blobu az storage blob delete silebilirsiniz. Birden çok blobu silerken, aşağıdaki örneklerde gösterildiği gibi koşullu işlemleri, döngüleri veya diğer otomasyonu kullanabilirsiniz.

Uyarı

Aşağıdaki örnekleri çalıştırmak blobları kalıcı olarak silebilir. Microsoft, kapsayıcıları ve blobları yanlışlıkla silinmeye karşı korumak için kapsayıcı geçici silmeyi etkinleştirmenizi önerir. Daha fazla bilgi için bkz . Kapsayıcılar için geçici silme.

Aşağıdaki örnek kod, hem tek tek hem de toplu silme işlemlerinin bir örneğini sağlar. İlk örnek adlı tek bir blobu siler. İkinci örnekte, Bash'te birden çok blobu silmek için mantıksal işlemlerin kullanımı gösterilmektedir. Üçüncü örnek, bennett-2 dışında bennett-x biçimindeki tüm blobları silmek için komutunu kullanırdelete-batch.

Daha fazla bilgi için az storage blob delete ve az storage blob delete-batch başvurusuna bakın.

#!/bin/bash
storageAccount="<storage-account>"
containerName="demo-container"

blobName="demo-file.txt"
blobPrefix="sinatra-"

#Delete a single, named blob
az storage blob delete \
    --container-name $containerName \
    --name $blobName \
    --account-name $storageAccount \
    --auth-mode login

#Iterate a blob list, deleting blobs whose names end with even numbers

## Get list of containers
blobList=$(az storage blob list \
    --query "[].name" \
    --prefix $blobPrefix \
    --container-name $containerName \
    --account-name $storageAccount \
    --auth-mode login \
    --output tsv)

## Delete all blobs with the format *bennett-x* except *bennett-2.*
for row in $blobList
do
    #Get the blob's number
    tmpBlob=$(echo $row | sed -e 's/\r//g') 
    tmpName=$(echo ${row%.*} | sed -e 's/\r//g')

    if [ `expr ${tmpName: ${#blobPrefix}} % 2` == 0 ]
    then
        
        echo "Deleting $tmpBlob"
        az storage blob delete \
            --container-name $containerName \
            --name $tmpBlob \
            --account-name $storageAccount \
            --auth-mode login

  fi
done

#Delete multiple blobs using delete-batch
az storage blob delete-batch \
    --source $containerName \
    --pattern bennett-[!2].* \
    --account-name $storageAccount \
    --auth-mode login

Bazı durumlarda silinmiş blobları almak mümkündür. Depolama hesabınızın geçici silme veri koruma seçeneği etkinleştirilirse, parametre ve değer hesabın --include d saklama süresi içinde silinen blobları döndürür. Geçici silme hakkında daha fazla bilgi edinmek için Bloblar için geçici silme makalesine bakın.

Kapsayıcının ilişkili saklama süresi içinde silinen blobların listesini almak için aşağıdaki örnekleri kullanın. İlk örnekte, son silinen tüm blobların ve silindikleri tarihlerin listesi görüntülenir. İkinci örnekte belirli bir ön ekle eşleşen tüm silinmiş bloblar listelenir.

#!/bin/bash
storageAccount="<storage-account>"
containerName="demo-container"

blobPrefix="sinatra-"

#Retrieve a list of all deleted blobs
az storage blob list \
    --container-name $containerName \
    --include d \
    --output table \
    --account-name $storageAccount \
    --auth-mode login \
    --query "[?deleted].{name:name,deleted:properties.deletedTime}"

#Retrieve a list of all deleted blobs matching a specific prefix
az storage blob list \
    --container-name $containerName \
    --prefix $blobPrefix \
    --output table \
    --include d \
    --account-name $storageAccount \
    --auth-mode login \
    --query "[].{name:name,deleted:deleted}"

Silinen blobu geri yükleme

Blobları listeleme bölümünde belirtildiği gibi, depolama hesabınızda geçici silme veri koruma seçeneğini yapılandırabilirsiniz. Etkinleştirildiğinde, ilişkili saklama süresi içinde silinen kapsayıcıları geri yüklemek mümkündür. Her kurtarma ve geri yükleme için bloblarınızın önceki sürümlerini korumak için sürüm oluşturma özelliğini de kullanabilirsiniz.

Blob sürümü oluşturma ve blob geçici silme etkinse, blobun değiştirilmesi, üzerine yazılması, silinmesi veya geri yüklenmesi otomatik olarak yeni bir sürüm oluşturur. Silinen blobu geri yüklemek için kullanacağınız yöntem, depolama hesabınızda sürüm oluşturmanın etkinleştirilip etkinleştirilmediğine bağlıdır.

Aşağıdaki kod örneği, geçici olarak silinen tüm blobları geri yükler veya sürüm oluşturma etkinleştirilirse blobun en son sürümünü geri yükler. Önce komutuyla sürüm oluşturmanın az storage account blob-service-properties show etkinleştirilip etkinleştirilmediğini belirler.

Sürüm oluşturma etkinse, az storage blob list komut benzersiz olarak adlandırılmış tüm blob sürümlerinin listesini alır. Ardından listedeki blob sürümleri tarihe göre alınır ve sıralanır. Öznitelik değerine sahip isCurrentVersion sürüm bulunamazsa, blobun az storage blob copy start en son sürümünün etkin bir kopyasını oluşturmak için komutu kullanılır.

Sürüm oluşturma devre dışı bırakılırsa, kapsayıcıdaki az storage blob undelete geçici olarak silinen her blobu geri yüklemek için komutu kullanılır.

Bu örneği takip edebilmeniz için önce depolama hesaplarınızdan en az birinde geçici silmeyi etkinleştirmeniz gerekir. Geçici silme veri koruma seçeneği hakkında daha fazla bilgi edinmek için Bloblar için geçici silme makalesine veya az storage blob undelete başvurusuna bakın.

#!/bin/bash
storageAccount="<storage-account>"
groupName="myResourceGroup"
containerName="demo-container"

blobSvcProps=$(
    az storage account blob-service-properties show \
        --account-name $storageAccount \
        --resource-group $groupName)

softDelete=$(echo "${blobSvcProps}" | jq -r '.deleteRetentionPolicy.enabled')
versioning=$(echo "${blobSvcProps}" | jq -r '.isVersioningEnabled')

# If soft delete is enabled
if $softDelete
then
    
    # If versioning is enabled
    if $versioning
    then

        # Get all blobs and versions using -Unique to avoid processing duplicates/versions
        blobList=$(
            az storage blob list \
                --account-name $storageAccount \
                --container-name $containerName \
                --include dv \--query "[?versionId != null].{name:name}" \
                --auth-mode login -o tsv | uniq)
        
        # Iterate the collection
        for blob in $blobList
        do
            # Get all versions of the blob, newest to oldest
            blobVers=$(
                az storage blob list \
                    --account-name $storageAccount \
                    --container-name $containerName \
                    --include dv \
                    --prefix $blob \
                    --auth-mode login -o json | jq 'sort_by(.versionId) | reverse | .[]')
            # Select the first (newest) object
            delBlob=$(echo "$blobVers" | jq -sr '.[0]')
            
            # Verify that the newest version is NOT the latest (that the version is "deleted")
            if [[ $(echo "$delBlob" | jq '.isCurrentVersion') != true ]]; 
            then
                # Get the blob's versionId property, build the URI to the blob
                versionID=$(echo "$delBlob" | jq -r '.versionId')
                uri="https://$storageAccount.blob.core.windows.net/$containerName/$blob?versionId=$versionID"
                
                # Copy the latest version 
                az storage blob copy start \
                    --account-name $storageAccount \
                    --destination-blob $blob \
                    --destination-container $containerName \
                    --source-uri $uri \
                    --auth-mode login
       
                delBlob=""
            fi
        done

    else

        #Retrieve all deleted blobs
        blobList=$( \
            az storage blob list \
                --container-name $containerName \
                --include d \
                --output tsv \
                --account-name $storageAccount \
                --auth-mode login \
                --query "[?deleted].[name]" \
        )

        #Iterate list of deleted blobs and restore
        for row in $blobList
        do
            tmpName=$(echo $row | sed -e 's/\r//g')
            echo "Restoring $tmpName"
            az storage blob undelete \
                --container-name $containerName \
                --name $tmpName \
                --account-name $storageAccount \
                --auth-mode login
        done

    fi

else
    
    #Soft delete is not enabled
    echo "Sorry, the delete retention policy is not enabled."

fi

Sonraki adımlar