请检查以下是否提供了解决方法的想法:
在这里,我尝试使用 delete 命令。
grep -v >>反转匹配的感觉,选择不匹配的行。
grep -o >> 仅显示匹配 PATTERN 的匹配行部分。
grep - 参考
1)尝试获取与模式“v”不匹配的标签
$tagsArray = az acr repository show-tags --name myacr --repository myrepo --orderby time_desc \
--output tsv | grep -v "v"
如果可能,请使用下面的清除命令检查(未经测试)
PURGE_CMD="acr purge --filter 'Repo1:.' --filter 'ubuntu:.' --ago 7d --filter '$tagsArray' --untagged --keep 5"
az acr run --cmd "$PURGE_CMD" --registry Myregistry /dev/null
(或者)
使用删除命令检查
前任:
$repositoryList = (az acr repository list --name $registryName --output json | ConvertFrom-Json)
foreach ($repo in $repositoryList)
{
$tagsArray = az acr repository show-tags --name myacr --repository myrepo --orderby time_desc \
--output tsv | grep -v "v"
foreach($tag in $tagsArray)
{
az acr repository delete --name $registryName --image $repo":"$tag --yes
}
}
或者,我们可以使用不应该删除的查询获取所有标签,并且可以使用 if else 语句标签。
foreach ($repo in $repositoryList)
{
$AllTags = (az acr repository show-tags --name $registryName --repository $repo --orderby time_asc --output json | ConvertFrom-Json ) | Select-Object -SkipLast $skipLastTags
$doNotDeleteTags=$( az acr repository show-tags --name $registryName --query "[?contains(name, 'tagname')]" --output tsv)
#or $doNotDeleteTags = az acr repository show-tags --name $registryName --repository $repo --orderby time_asc --output json | ConvertFrom-Json ) -- query "[?starts_with(name,'prefix')].name"
foreach($tag in $AllTags)
{
if ($donotdeletetags -contains $tag)
{
Write-Output ("This tag is not deleted $tag")
}
else
{
az acr repository delete --name $registryName --image $repo":"$tag --yes
}
}
}
参考:
- 从 acr-that-doesnt-start-with-a-prefix 获取最新图像
- 天蓝色容器注册表删除
- 如何从 azure-container-registry 中删除图像
- acr-delete-only-old-images-