如何用PowerShell获取Azure Blob Storage指定目录的直接子目录?
如何用PowerShell获取Azure Blob容器指定目录的直接子目录
要仅获取backup/11-1-0/backup/下的直接子目录(即20230713-100023-BACKUP这类一级子目录),需要利用Get-AzStorageBlob的-Delimiter参数限制层级,而不是用通配符*(后者会递归返回所有子项)。
1. 获取直接子目录
使用以下命令可以精准获取目标路径下的直接子虚拟目录:
$targetPrefix = "backup/11-1-0/backup/" $directSubDirs = Get-AzStorageBlob -Context $context -Container $container -Prefix $targetPrefix -Delimiter "/" | Where-Object { $_.ICloudBlob.Name -ne $targetPrefix } | ForEach-Object { $dirName = $_.ICloudBlob.Name.TrimEnd("/") $dirName.Substring($targetPrefix.Length) }
-Prefix指定起始路径,确保只扫描该路径下的内容-Delimiter "/"会让存储服务仅返回该前缀下的直接子目录,不会递归到更深层级- 通过后续处理提取纯目录名称,最终
$directSubDirs会包含你需要的20230713-100023-BACKUP等目录名
2. 删除超过7天的过期目录
根据目录名中的日期(如20230713),可以提取日期并判断是否过期,然后删除对应目录下的所有Blob(Azure Blob无实际目录,删除前缀匹配的所有Blob等价于删除目录):
$cutoffDate = (Get-Date).AddDays(-7) foreach ($dir in $directSubDirs) { # 提取目录名中的8位日期部分 if ($dir -match "^(\d{8})") { $dirDate = [DateTime]::ParseExact($matches[1], "yyyyMMdd", $null) if ($dirDate -lt $cutoffDate) { # 获取该目录下的所有Blob $blobsToRemove = Get-AzStorageBlob -Context $context -Container $container -Prefix "$targetPrefix$dir/" if ($blobsToRemove) { # 删除Blob Remove-AzStorageBlob -Context $context -Container $container -Blob $blobsToRemove.Name Write-Host "已清理过期目录: $dir" } } } }
内容的提问来源于stack exchange,提问作者Genspec
相关产品推荐
相关产品推荐

