如何使用New-AzDataLakeGen2Item上传本地目录下的多个文件
New-AzDataLakeGen2Item的-Source参数仅支持传入单个本地文件的完整路径,不支持通配符也不支持直接传入本地目录路径,因此你之前的两种写法都会报错。要实现批量上传,可通过PowerShell遍历本地文件后循环调用该接口实现,具体方案如下:
示例1:仅上传指定目录下的所有文件(不包含子目录)
# 配置参数 $localFolderPath = "C:\temp\" $fileSystemName = "testfilesystem" $remoteBasePath = "dir1/dir2/" # ADLS Gen2 目标根路径 # 遍历本地文件逐个上传 Get-ChildItem -Path $localFolderPath -File | ForEach-Object { $remoteFilePath = $remoteBasePath + $_.Name New-AzDataLakeGen2Item -FileSystem $fileSystemName -Path $remoteFilePath -Source $_.FullName -Force }
示例2:上传目录全量内容(保留子目录层级结构)
如果需要同时上传子目录内的文件,并且在ADLS Gen2中保留和本地一致的目录结构,使用以下代码:
# 配置参数 $localRootPath = "C:\temp\" $fileSystemName = "testfilesystem" $remoteRootPath = "dir1/dir2/" # 递归遍历所有文件 Get-ChildItem -Path $localRootPath -File -Recurse | ForEach-Object { # 计算相对路径,适配ADLS的正斜杠路径格式 $relativePath = $_.FullName.Substring($localRootPath.Length).Replace('\','/') $remoteFullPath = $remoteRootPath + $relativePath New-AzDataLakeGen2Item -FileSystem $fileSystemName -Path $remoteFullPath -Source $_.FullName -Force }
补充说明
- 代码中的
-Force参数会自动覆盖ADLS Gen2中已存在的同名文件,不需要覆盖可删除该参数 - 如需异步并行上传,可在
New-AzDataLakeGen2Item后添加-AsJob参数,所有上传任务会在后台执行 - 方案完全基于
New-AzDataLakeGen2Item原生接口实现,不需要额外引入其他组件
内容的提问来源于stack exchange,提问作者Dreamer
相关产品推荐
相关产品推荐

