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

如何递归获取ADLS Gen2的路径及KB级大小信息?

解决ADLS Gen2递归获取文件/文件夹路径及对应KB大小的问题

原代码问题分析

  1. 使用Measure-Object -Sum直接汇总所有文件的大小,仅能得到总大小,无法输出单个路径的信息。
  2. 自定义属性中的$Path变量未定义,导致输出的Path列无内容。
  3. 未区分文件与文件夹的大小逻辑,文件夹本身的Length属性为0,直接汇总无法体现文件夹下文件的总大小(若有需求)。

方案1:输出文件/文件夹自身大小(文件夹大小为0)

如果仅需展示文件夹自身大小(固定为0KB)和文件的实际大小,使用以下代码:

$ctx = New-AzStorageContext -StorageAccountName "******" -UseConnectedAccount

# 递归获取目标路径下所有文件和文件夹
$allItems = Get-AzDataLakeGen2ChildItem -Context $ctx -FileSystem "******" -Path "a/b/c" -Recurse

# 格式化输出路径与KB级大小(保留两位小数)
$allItems | Select-Object 
    @{Name="Path"; Expression={$_.Path}},
    @{Name="SizeInKB"; Expression={[math]::Round($_.Length / 1KB, 2)}} |
Sort-Object Path

输出示例:

Path         SizeInKB
----         --------
a/b/c              0
a/b/c/ef          10
a/b/c/file1       25.5

方案2:输出文件夹下所有文件的总大小(含子文件夹)

如果需要统计文件夹下所有文件(包括嵌套子文件夹中的文件)的总大小,使用以下代码:

$ctx = New-AzStorageContext -StorageAccountName "******" -UseConnectedAccount
$fileSystemName = "******"
$targetRootPath = "a/b/c"

# 获取目标路径下所有递归项(含隐藏项)
$allItems = Get-AzDataLakeGen2ChildItem -Context $ctx -FileSystem $fileSystemName -Path $targetRootPath -Recurse -Force

$outputResults = @()

# 单独处理根路径的总大小
$rootFolderFiles = Get-AzDataLakeGen2ChildItem -Context $ctx -FileSystem $fileSystemName -Path $targetRootPath -Recurse -File
$rootTotalSize = ($rootFolderFiles | Measure-Object -Property Length -Sum).Sum
$outputResults += [PSCustomObject]@{
    Path     = $targetRootPath
    SizeInKB = [math]::Round($rootTotalSize / 1KB, 2)
}

# 遍历所有子项,计算对应大小
foreach ($item in $allItems) {
    $currentPath = $item.Path
    if ($item.IsDirectory) {
        # 文件夹:递归获取其下所有文件并求和
        $folderFiles = Get-AzDataLakeGen2ChildItem -Context $ctx -FileSystem $fileSystemName -Path $currentPath -Recurse -File
        $totalSize = ($folderFiles | Measure-Object -Property Length -Sum).Sum
    } else {
        # 文件:直接使用自身大小
        $totalSize = $item.Length
    }
    $outputResults += [PSCustomObject]@{
        Path     = $currentPath
        SizeInKB = [math]::Round($totalSize / 1KB, 2)
    }
}

# 去重并按路径排序输出
$outputResults | Sort-Object Path | Select-Object Path, SizeInKB -Unique

输出示例:

Path         SizeInKB
----         --------
a/b/c            135.5
a/b/c/ef          10
a/b/c/subdir      90
a/b/c/file1       25.5

内容的提问来源于stack exchange,提问作者Swarnava Sen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 18:17:02