minio删除桶可以实现成功删除,为什么删除指定文件或指定目录就不能成功删除呢?
运行python输出:
File 'dzjz/yxsj/dzjzzz/522700/d9d56b3a2c6b45a79a7e49ea71ee0baf/01e7384be5064c37b425efe180356285/01e7384be5064c37b425efe180356285.jpg' has been deleted.
All objects under folder 'dzjz/yxsj/dzjzzz/522700/d9d56b3a2c6b45a79a7e49ea71ee0baf/' have been deleted.
代码如下:
from minio import Minio
import re
import re
def delete_single_file(minio_client, bucket_name, file_path):
"""
删除MinIO中指定文件。
:param minio_client: Minio客户端实例
:param bucket_name: 存储桶名称
:param file_path: 文件路径
"""
try:
# 执行删除操作
minio_client.remove_object(bucket_name, file_path)
print(f"File '{file_path}' has been deleted.")
except Exception as err:
print(f"An error occurred: {err}")
def delete_bucket_folder(minio_client, bucket_name, folder_path):
"""
删除MinIO中指定文件夹及其所有子对象。
:param minio_client: Minio客户端实例
:param bucket_name: 存储桶名称
:param folder_path: 要删除的文件夹路径(以斜杠结尾)
"""
try:
# 获取所有匹配路径的对象
objects = list(minio_client.list_objects(bucket_name, prefix=folder_path, recursive=True))
# 直接在结果中使用正则表达式匹配
objects = [obj for obj in objects if re.match(f'^{re.escape(folder_path)}', obj.object_name)]
print(f"Objects under folder '{folder_path}':")
if objects:
print(f"Found {len(objects)} objects to delete under folder '{folder_path}'.")
# 确认用户是否希望继续删除
confirm = input("Are you sure you want to delete these objects? (yes/no): ")
if confirm.lower() != 'yes':
print("Deletion cancelled.")
return
print("All objects:")
# 执行删除操作
for obj in objects:
print(obj.object_name)
minio_client.remove_object(bucket_name, obj.object_name)
print(f"Deleted: {obj.object_name}")
print(f"All objects under folder '{folder_path}' have been deleted.")
else:
print(f"No objects found under folder '{folder_path}'.")
except Exception as err:
print(f"An error occurred: {err}")
def delete_bucket_folder1(minio_client, bucket_name, folder_path):
"""
删除MinIO中指定文件夹及其所有子对象。
:param minio_client: Minio客户端实例
:param bucket_name: 存储桶名称
:param folder_path: 要删除的文件夹路径(以斜杠结尾)
"""
try:
# 获取所有匹配路径的对象
objects = list(minio_client.list_objects(bucket_name, prefix=folder_path, recursive=True))
# 递归删除所有对象
for obj in objects:
if obj.is_prefix():
delete_bucket_folder(minio_client, bucket_name, obj.object_name)
else:
minio_client.remove_object(bucket_name, obj.object_name)
print(f"Deleted: {obj.object_name}")
print(f"All objects under folder '{folder_path}' have been deleted.")
except Exception as err:
print(f"An error occurred: {err}")
def main():
# 创建MinIO客户端
minio_client = Minio(
"192.168.100.67:9000",
access_key="minioadmin",
secret_key="minioadmin",
secure=False
)
##
## # 要删除的文件夹路径
## folder_to_delete = "/yxsj/dzjzzz/"
##
## # 删除指定路径下的所有对象
## delete_bucket_folder(minio_client, "dzjz", folder_to_delete)
## # 要删除的文件路径
## file_to_delete = "dzjz/yxsj/dzjzzz/522700/d9d56b3a2c6b45a79a7e49ea71ee0baf/01e7384be5064c37b425efe180356285/01e7384be5064c37b425efe180356285.jpg"
##
## # 删除指定路径的文件
## delete_single_file(minio_client, "dzjz", file_to_delete)
# 要删除的文件夹路径
folder_to_delete = "dzjz/yxsj/dzjzzz/522700/d9d56b3a2c6b45a79a7e49ea71ee0baf/"
# 删除指定路径的文件夹
delete_bucket_folder1(minio_client, "dzjz", folder_to_delete)
if __name__ == "__main__":
main()