如何递归获取ADLS Gen2的路径及KB级大小信息?
解决ADLS Gen2递归获取文件/文件夹路径及对应KB大小的问题
原代码问题分析
- 使用
Measure-Object -Sum直接汇总所有文件的大小,仅能得到总大小,无法输出单个路径的信息。 - 自定义属性中的
$Path变量未定义,导致输出的Path列无内容。 - 未区分文件与文件夹的大小逻辑,文件夹本身的
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
相关产品推荐
相关产品推荐

