如何删除Azure File Share中特定时间段之前的旧文件
清除Azure文件共享中早于指定时间旧文件的实现方案
目前可以通过AZ CLI组合命令、自定义代码两种方式实现过期文件清理,具体实现方式如下:
方案1:使用AZ CLI实现
AZ CLI没有内置直接批量删除过期文件的专用命令,可以通过组合文件查询、筛选、删除命令实现需求:
- 首先配置自定义参数,计算过期截止时间
# 配置参数,替换为你自己的实际值 STORAGE_ACCOUNT="存储账户名称" FILE_SHARE_NAME="文件共享名称" RETENTION_DAYS=7 # 自定义保留天数,此处示例保留最近7天的文件 # Linux/macOS环境计算UTC格式的截止时间 CUTOFF_DATE=$(date -d "-$RETENTION_DAYS days" +%Y-%m-%dT%H:%M:%SZ) # Windows PowerShell环境计算UTC格式的截止时间请使用以下命令 # $CUTOFF_DATE = (Get-Date).AddDays(-$RETENTION_DAYS).ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ssZ")
- 筛选并删除过期文件
# 先执行以下命令确认要删除的文件范围,确认无误后再拼接删除命令 az storage file list --share-name $FILE_SHARE_NAME \ --account-name $STORAGE_ACCOUNT \ --recursive \ # 有子目录时需要加该参数递归查询所有层级文件 --query "[?properties.lastModified < '$CUTOFF_DATE'].name" -o tsv # 确认筛选结果正确后,执行删除(Linux/macOS环境) az storage file list --share-name $FILE_SHARE_NAME \ --account-name $STORAGE_ACCOUNT \ --recursive \ --query "[?properties.lastModified < '$CUTOFF_DATE'].name" -o tsv | \ xargs -I {} az storage file delete --share-name $FILE_SHARE_NAME \ --account-name $STORAGE_ACCOUNT \ --path {} # PowerShell环境执行删除请使用以下命令 # az storage file list --share-name $FILE_SHARE_NAME --account-name $STORAGE_ACCOUNT --recursive --query "[?properties.lastModified < '$CUTOFF_DATE'].name" -o tsv | ForEach-Object { az storage file delete --share-name $FILE_SHARE_NAME --account-name $STORAGE_ACCOUNT --path $_ }
方案2:使用Python代码实现
适合需要自定义逻辑、批量处理大量文件的场景:
- 先安装依赖SDK
pip install azure-storage-file-share
- 清理代码示例
from azure.storage.fileshare import ShareServiceClient from datetime import datetime, timedelta, timezone # 配置参数 connection_string = "你的存储账户连接字符串" share_name = "你的文件共享名称" retention_days = 7 # 自定义保留天数 # 计算UTC时区的过期截止时间 cutoff_time = datetime.now(timezone.utc) - timedelta(days=retention_days) # 初始化客户端 share_service_client = ShareServiceClient.from_connection_string(connection_string) share_client = share_service_client.get_share_client(share_name) # 遍历所有文件,删除符合条件的过期文件 for item in share_client.list_directories_and_files(include_properties=True, recursive=True): if not item.is_directory: # 跳过目录只处理文件 if item.last_modified < cutoff_time: print(f"删除过期文件:{item.name}, 最后修改时间:{item.last_modified}") share_client.delete_file(item.name) print("所有过期文件清理完成")
注意事项
- 执行删除前务必先单独运行查询命令,确认要删除的文件范围正确,避免误删重要数据
- 建议提前开启存储账户的软删除功能,作为误删后的兜底恢复机制
- 清理超大量文件时可以添加并发控制、分页逻辑,提升清理效率
内容的提问来源于stack exchange,提问作者Muhammad Ali Nazarudeen
相关产品推荐
相关产品推荐

