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'ya 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'ya tüm erişim 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 +%Y:%m:%d -d "7 days ago")
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. Parametresinin --prefix
bir parçası olarak bir sanal dizin belirtebilirsiniz.
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 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şım, belirtilen kapsayıcı içindeki tüm blobları listeler. İkinci yaklaşım, --prefix
belirtilen ön ek ile başlayan kapsayıcılardaki tüm blobları listelemek için parametresini kullanır. Üçüncü yaklaşım, döndürülen sonuçları sınırlamak için parametresini ve --show-next-marker
sonuçlara devamlılık belirtecini dahil etmek için parametresini kullanır--num-results
. Sonuçlarda bir devamlılık belirteci mevcut olduğunda, sonraki sonuç kümesini almak için sonraki çağrısına az storage blob list
geçirilir.
Daha fazla bilgi için az storage blob list başvurusuna bakın.
#!/bin/bash
storageAccount="<storage-account>"
containerName="<container-name>"
blobPrefix="<prefix-string>"
numResults=5
#Approach 1: List all blobs in a container by name.
az storage blob list \
--account-name $storageAccount \
--container $containerName \
--query "[].name" \
--auth-mode login \
--output tsv
#Approach 2: Use the --prefix parameter to list blobs starting with specified prefix.
az storage blob list \
--account-name $storageAccount \
--container $containerName \
--prefix $blobPrefix \
--query "[].name" \
--auth-mode login \
--output tsv
#Approach 3: Use the continuation token to return the complete set of results.
get_blobs() {
if [ -z "$nextMarker" ]; then
az storage blob list --container-name $containerName --num-results $numResults --account-name $storageAccount --show-next-marker --only-show-errors --auth-mode login
else
az storage blob list --container-name $containerName --num-results $numResults --marker $nextMarker --account-name $storageAccount --show-next-marker --only-show-errors --auth-mode login
fi
}
total=0
nextMarker=""
while true; do
blobs=$(get_blobs $containerName $numResults $storageAccount $nextMarker)
nextMarker=""
blobsLength=$(echo $blobs | jq length)
if [ $blobsLength -le 0 ]; then
break
fi
blobIndex=0
while read blob; do
if [ $blobIndex -eq $(($blobsLength-1)) ];
then
nextMarker="$(echo $blob | jq -r .nextMarker)"
else
blobName=$(echo $blob | jq .name)
echo "blobname: $blobName"
fi
((blobIndex++))
done <<<$(echo $blobs | jq -c '.[]')
total=$(($total+$blobsLength-1))
echo "Processed $total blobs so far"
# echo "nextMarker: $nextMarker"
if [ "${nextMarker}" = "null" ]; then
echo -e "\nAccountName: $storageAccount, ContainerName: $containerName "
echo "Processed $total blobs in total."
break
fi
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 , --file
ve --name
parametrelerinin --container-name
değ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.
Daha fazla 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. Sistem özellikleri her Blob Depolama kaynağında bulunur. 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.
Daha fazla 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.
Daha fazla 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şimliden arş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.
Daha fazla 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şimli archive
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.
Daha fazla 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ştirildiyse, parametresi geçirildiğinde --include d
hesabın saklama süresi içinde silinen bloblar döndürülebilir. 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