使用Azcopy删除目录内文件但保留父目录的方法咨询
解决Azcopy删除Blob目录文件时保留父目录的问题
要删除test_folder2内的所有文件但保留该虚拟目录,需结合Azure Blob存储的特性调整命令:
问题原因
Azure Blob存储中的“文件夹”是虚拟目录,并非真实存在的实体,仅由Blob路径中的前缀标识。当该前缀下的所有Blob被删除后,虚拟目录会自动从存储容器的视图中消失,这属于Blob存储的默认行为,而非Azcopy的操作问题。
你之前使用/*的命令会删除test_folder2下的所有Blob,导致虚拟目录因无内容而消失;而设置--recursive=false报错,是因为非空目录必须开启递归才能删除其中的内容。
解决方案
1. 删除所有文件(含子目录内容),手动保留虚拟目录
首先执行删除命令清理所有文件:
azcopy rm "https://[account].blob.core.windows.net/[container]/test_folder1/test_folder2?[SAS]" --recursive=true --include-pattern="*"
命令执行后,test_folder2会因无Blob而“消失”,此时需上传一个空的占位Blob来保留虚拟目录:
# 先在本地创建一个空文件,比如命名为empty.txt azcopy copy "empty.txt" "https://[account].blob.core.windows.net/[container]/test_folder1/test_folder2/.keep?[SAS]"
上传.keep空文件后,test_folder2前缀存在,虚拟目录会重新显示在容器中。
2. 仅删除当前目录下的文件(不递归删除子目录)
若只需删除test_folder2根目录下的文件,不涉及子目录,可使用--exclude-pattern="*/"排除子目录:
azcopy rm "https://[account].blob.core.windows.net/[container]/test_folder1/test_folder2?[SAS]" --recursive=true --include-pattern="*" --exclude-pattern="*/"
同样,若删除后需保留虚拟目录,仍需上传占位Blob。
内容的提问来源于stack exchange,提问作者SDE
相关产品推荐
相关产品推荐

