【问题标题】:Recursively Report Folder statistics in ADLS Gen 1 - CLI or Powershell递归报告 ADLS Gen 1 中的文件夹统计信息 - CLI 或 Powershell
【发布时间】:2021-12-13 23:44:01
【问题描述】:

我正在尝试遍历 ADLS 文件系统的目录结构,报告每个目录的大小和格式,直到没有其他目录存在为止。

由于文件夹结构包含 TB 的数据,我认为将 Azure CLI 与 PowerShell 结合使用是解决此问题的最有效方法。

但 Gen 1 的 CLI 命令仅限于: az dls fs list --account <storage_account> --path <path of the file>

我可以在 Powershell 中使用这个命令来进一步遍历文件夹结构的其余部分吗?或者是否有另一种方法可以在不使用 CLI 命令的情况下循环遍历 ADLS 的文件夹结构?

我是 Azure CLI 的新手,因此如果这个问题不是很高级,我深表歉意。

【问题讨论】:

  • 试用 Power BI Desktop。我最近针对 ADLS Gen 2 成功完成了此操作,尚未尝试 Gen 1。删除 Binary 列并展开文件夹属性的大小。

标签: azure powershell azure-data-lake azure-cli


【解决方案1】:

我们在本地环境中进行了测试,以下观察是基于我们的分析。

  1. 我们无法获取累积的目录大小,无论哪个 您喜欢使用的工具(例如:门户、存储资源管理器或通过 PowerShell cmdlet)。

  1. 如果您使用此 cmdlet Get-AzDataLakeStoreChildItemSummary,这将给出目录计数(此容器中可用的目录数)、文件计数(所有子文件夹/目录中的文件总数)、长度(目录中所有文件消耗的总大小 &在子文件夹中)。
 $listdir=Get-AzDataLakeStoreChildItem -account '<DataLakeAccountName>' -Path /
    $listarray=$listdir
    
    foreach( $listdir in $listarray)
    {
        Write-Output ("current we are listing the files with "+$listdir.Name);
    
        Get-AzDataLakeStoreChildItemSummary -account '<DataLakeAccountName>' -path /$($listdir.Name)
    
     }

  • 在上面的屏幕截图中,目录名称为tried,testing 值为 0,因为它确实有任何文件或子目录。
  • 目录trim 的值为 6,因为它有 2 个文件 track1子目录和jshfa子目录下的4个文件。

或者,如果您列出具有相应大小的子目录下的文件,您可以使用以下脚本。

$listdir=Get-AzDataLakeStoreChildItem -account '<DataLakeAccountName>' -Path /
    $listarray=$listdir
    
    foreach( $listdir in $listarray)
    {
        
       Write-Output ("current we are listing the files under "+$listdir.Name +" "+"length of the Directory is: " + $listdir.length);
       
       $addvar=Get-AzDataLakeStoreChildItem -account '<DataLakeAccountName>' -Path /$($listdir.Name) | Select -Property length,Name,type;
       
       ##Write-Host $addvar;
    
       $subdirect = $addvar; 
    
       ##Write-Host $subdirect;
    
       foreach( $addvar in $subdirect)
       {
        if($addvar.type -eq 'DIRECTORY')
        {
             
          $subfolderlist=Get-AzDataLakeStoreChildItem -account '<DataLakeAccountName>' -Path /$($listdir.Name)/$($addvar.Name);
          Write-Output $subfolderlist
        
        }
       }
       Write-Output $addvar
    }

以下是上述脚本的输出: 这里 Trim 有 2 个子目录(track1,track234),因为 track1 有两个文件,这些文件在此处列出,其余目录,子目录没有任何文件,因此长度值下面的输出是0。

注意: 如果每次您需要在每个循环中附加目录路径并相应地进行更改时,子目录下都有多个文件夹。

同样Azure CLI、PowerShell Cmdlet 都依赖于给定的-path 参数。

【讨论】:

    猜你喜欢
    • 2017-10-26
    • 1970-01-01
    • 2021-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多