Azure CLI - az storage file delete-batch:如何编写排除单个特定文件的匹配模式
解决Azure存储文件共享批量删除排除特定文件的问题
你遇到的问题在于--pattern参数遵循的是glob匹配规则,而你写的[!importantfile.py]其实是字符类排除逻辑——它只会排除单个字符属于i,m,p,o,r,t,a,n,t,f,i,l,e,.,p,y的字符,而不是排除整个importantfile.py文件,这就是为什么你的模式没匹配到任何内容。
下面提供两种可行的解决方案:
方法1:Azure CLI结合Shell脚本(PowerShell/Bash)
这种方法适合不想额外安装工具的场景,通过先过滤文件列表再批量删除:
PowerShell版本
# 获取共享内所有文件,排除importantfile.py $files = az storage file list --share-name myshare --account-name myst --sas-token $sastoken --query "[?name != 'importantfile.py'].name" -o tsv # 遍历删除每个目标文件 foreach ($file in $files) { az storage file delete --share-name myshare --account-name myst --sas-token $sastoken --path $file }
如果需要处理子目录,给az storage file list加上--recursive参数即可。
Bash版本
# 获取共享内所有文件,排除importantfile.py files=$(az storage file list --share-name myshare --account-name myst --sas-token $sastoken --query "[?name != 'importantfile.py'].name" -o tsv) # 遍历删除每个目标文件 for file in $files; do az storage file delete --share-name myshare --account-name myst --sas-token $sastoken --path "$file" done
方法2:使用AzCopy(更高效简洁)
AzCopy是微软官方的存储传输工具,支持直接通过参数排除特定文件,处理大量文件时效率更高:
azcopy delete "https://myst.file.core.windows.net/myshare?$sastoken" --recursive --exclude-path "importantfile.py"
PowerShell环境下语法完全一致,--recursive参数会处理子目录中的文件,如果只需要删除根目录文件可以去掉该参数。
内容的提问来源于stack exchange,提问作者silent
相关产品推荐
相关产品推荐

