AzCopy上传目录至Blob存储,能否保留结构并按文件属性设元数据?
问题
需要将本地带层级结构的目录上传至Azure Blob存储,要求:
- 保留原文件夹结构
- 为每个文件保留最后修改时间,存入文件元数据中
已知AzCopy支持为单个文件指定元数据(示例命令如下),但不想通过PowerShell脚本循环逐个处理文件,询问AzCopy是否支持基于上传文件自身属性批量设置元数据。
本地目录结构示例:
PS C:\UploadFolder> tree /F C:. └───DocumentsForUpload └───Identifier ├───Identifier2-1 │ doc1.pdf │ ├───Identifier2-2 │ doc1.docx │ doc2.doc │ └───Identifier2-3 etc
单个文件设置元数据示例命令:
azcopy copy "individual_file_path" "https://xxx.blob.core.windows.net/test1/aaa1.txt?sasToken" --metadata "lastmodified=2023-08-15 04:43:36"
答案
AzCopy 支持批量将本地文件的最后修改时间同步到Blob存储,无需逐个调用命令,同时能完整保留原目录结构,具体实现如下:
核心参数说明
使用azcopy copy时,通过--preserve-smb-info或--preserve-last-modified-time参数,可自动将本地文件的最后修改时间同步到Blob的属性/元数据中,无需手动指定。完整批量上传命令
优先推荐同步完整SMB属性(含最后修改时间)的命令:azcopy copy "C:\UploadFolder\DocumentsForUpload\*" "https://xxx.blob.core.windows.net/test1?sasToken" --recursive --preserve-smb-info若仅需同步最后修改时间,可使用更轻量化的参数:
azcopy copy "C:\UploadFolder\DocumentsForUpload\*" "https://xxx.blob.core.windows.net/test1?sasToken" --recursive --preserve-last-modified-time关键参数解析
--recursive:递归遍历本地层级目录,自动在Blob存储中重建相同的文件夹结构--preserve-smb-info:将本地文件的最后修改时间、创建时间、权限等SMB属性同步到Blob的元数据与系统属性中--preserve-last-modified-time:仅同步文件的最后修改时间到Blob的系统Last-Modified属性,满足基础时间保留需求
注意事项
- AzCopy会自动将最后修改时间写入Blob的系统
Last-Modified字段,该字段可直接被Azure服务识别;若必须存入自定义lastmodified元字段,目前AzCopy无直接批量映射参数,但常规场景下系统字段足以替代 - 确保使用的SAS令牌拥有写入文件及设置元数据的权限
- AzCopy会自动将最后修改时间写入Blob的系统
内容的提问来源于stack exchange,提问作者dropsoid
相关产品推荐
相关产品推荐

