You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 11:48:27