使用Python脚本重命名OSS目录

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,内容安全 1000次 1年
对象存储 OSS,恶意文件检测 1000次 1年
简介: 因为OSS中本质上没有"目录"这一概念,所有对象(Object)都是以键(Key)的形式存储的,目录结构是通过对象键的前缀和分隔符来模拟的。因此,批量重命名目录实际上是批量更改一组对象的键的前缀。具体来说,需要列举特定目录下所有对象以获取它们的键,然后为每个对象生成新的键,这通常包括替换或添加前缀。接下来,通过复制操作将每个对象移到新的键位置,实质上为它们创建了新的键对应的对象。一旦确认所有对象都成功复制,就进行批量删除,移除那些与原始键相对应的对象。本文提供了一个Python脚本用于实现重命名OSS目录。

声明

本脚本用于批量重命名阿里云对象存储(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/
相关实践学习
借助OSS搭建在线教育视频课程分享网站
本教程介绍如何基于云服务器ECS和对象存储OSS,搭建一个在线教育视频课程分享网站。
相关文章
|
3月前
|
存储 人工智能 开发工具
AI助理化繁为简,速取代码参数——使用python SDK 处理OSS存储的图片
只需要通过向AI助理提问的方式输入您的需求,即可瞬间获得核心流程代码及参数,缩短学习路径、提升开发效率。
1469 4
AI助理化繁为简,速取代码参数——使用python SDK 处理OSS存储的图片
|
4月前
|
Python
用python转移小文件到指定目录并压缩,脚本封装
这篇文章介绍了如何使用Python脚本将大量小文件转移到指定目录,并在达到大约250MB时进行压缩。
53 2
|
1月前
|
存储 应用服务中间件 开发工具
对象存储OSS-Python设置代理访问请求
通过 Python SDK 配置 nginx 代理地址请求阿里云 OSS 存储桶服务。示例代码展示了如何使用 RAM 账号进行身份验证,并通过代理下载指定对象到本地文件。
91 15
|
3月前
|
对象存储
一个通过 GitHub Action 将 GitHub 仓库与阿里云 OSS 完全同步的脚本
一种将 GitHub 仓库完全同步到阿里云 OSS 的方法。
|
3月前
|
Python
Python实用记录(四):os模块-去后缀或者改后缀/指定目录下图片或者子目录图片写入txt/csv
本文介绍了如何使用Python的os模块来操作文件,包括更改文件后缀、分割文件路径和后缀、将指定目录下的所有图片写入txt文档,以及将指定目录下所有子目录中的图片写入csv文档,并为每个子目录分配一个标签。
41 1
|
3月前
|
编解码 UED Python
Python批量修改指定目录下图片的大小名文章
Python批量修改指定目录下图片的大小名文章
28 1
|
3月前
|
Python
Python实用记录(十二):文件夹下所有文件重命名以及根据图片路径保存到新路径下保存
这篇文章介绍了如何使用Python脚本对TTK100_VOC数据集中的JPEGImages文件夹下的图片文件进行批量重命名,并将它们保存到指定的新路径。
49 0
|
4月前
|
Python
Python获取二级目录的第二文件名
Python获取二级目录的第二文件名
|
4月前
|
Python
Python将目录分割成数组
Python将目录分割成数组
|
4月前
|
Python
python编程获取续蜀山剑侠传:从目录名称、网址到内容
python编程获取续蜀山剑侠传:从目录名称、网址到内容

热门文章

最新文章

相关产品

  • 对象存储