声明
本脚本用于批量重命名阿里云对象存储(OSS)中的文件。重命名文件是一个重要操作,如果不正确执行,可能会导致文件访问路径改变,从而影响依赖这些文件的应用或服务。在执行本脚本之前,请确保您已经理解了所有潜在的风险,并且做出了明智的决定。此外,请确保已经采取了必要的预防措施,包括但不限于数据备份,以避免因操作不当导致的数据丢失。您必须自行承担使用本脚本导致的所有后果。脚本作者或提供者不对任何因使用或滥用本脚本而可能导致的直接或间接损害、数据丢失、服务中断或任何其他类型的损失承担责任。
限制
- 不包含重命名历史版本Object的逻辑。
- 对于开启了保留策略的Bucket。只会复制文件,不会删除原文件。
脚本
importoss2fromoss2.credentialsimportEnvironmentVariableCredentialsProvider# 从环境变量中获取访问凭证。credentials_provider=EnvironmentVariableCredentialsProvider() auth=oss2.Auth(credentials_provider.get_credentials().access_key_id, credentials_provider.get_credentials().access_key_secret) bucket=oss2.Bucket(auth, 'https://oss-cn-beijing.aliyuncs.com', 'your-bucket') # 收集要删除的对象键objects_to_delete= [] # OSS上的源目录路径和目的目录路径source_folder_key='source-directory/'destination_folder_key='destination-directory/'# 列举源目录下所有文件和目录forobjinoss2.ObjectIterator(bucket, prefix=source_folder_key): print(obj.key) # 打印对象的键(key)destination_key=destination_folder_key+obj.key[len(source_folder_key):] # 复制文件到新位置try: result=bucket.copy_object(bucket.bucket_name, obj.key, destination_key) ifresult.status==200: print(f"File copied to: {destination_key}") # 确认复制成功后,将原文件添加到待删除列表objects_to_delete.append(obj.key) else: print(f"Failed to copy {obj.key}") # 如果复制失败,不添加到待删除列表exceptoss2.exceptions.OssErrorase: print(f"OSS error: {e}") # 如果出现异常,不添加到待删除列表# 检查是否有需要删除的文件ifobjects_to_delete: # 执行批量删除操作result=bucket.batch_delete_objects(objects_to_delete) fordelete_markerinresult.deleted_keys: print(f"Original file deleted: {delete_marker}") else: print("No files to delete.")
运行
运行以下命令以执行脚本:
pip install oss2 python3 rename_objects.py
输出
nana2/1 4.png File copied to: source-directory/1 4.png nana2/alishan/ File copied to: source-directory/alishan/ nana2/examplefolder/demo.html File copied to: source-directory/examplefolder/demo.html nana2/test/ File copied to: source-directory/test/ Original file deleted: nana2/1 4.png Original file deleted: nana2/alishan/ Original file deleted: nana2/examplefolder/demo.html Original file deleted: nana2/test/