使用Python脚本重命名OSS目录

本文涉及的产品
对象存储 OSS,OSS 加速器 50 GB 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快速上手——如何使用ossbrowser
本实验是对象存储OSS入门级实验。通过本实验,用户可学会如何用对象OSS的插件,进行简单的数据存、查、删等操作。
相关文章
|
关系型数据库 MySQL Shell
MySQL 备份 Shell 脚本:支持远程同步与阿里云 OSS 备份
一款自动化 MySQL 备份 Shell 脚本,支持本地存储、远程服务器同步(SSH+rsync)、阿里云 OSS 备份,并自动清理过期备份。适用于数据库管理员和开发者,帮助确保数据安全。
|
存储 人工智能 开发工具
AI助理化繁为简,速取代码参数——使用python SDK 处理OSS存储的图片
只需要通过向AI助理提问的方式输入您的需求,即可瞬间获得核心流程代码及参数,缩短学习路径、提升开发效率。
1835 5
AI助理化繁为简,速取代码参数——使用python SDK 处理OSS存储的图片
|
9月前
|
数据采集 监控 算法
Python文件与目录比较全攻略:从基础操作到性能优化
文件比较的核心在于数据指纹校验,通过逐字节比对生成唯一标识,确保内容一致性。从标准库的os与filecmp到高性能第三方库如pydiffx,再到分布式与量子加密技术的未来趋势,文件比较广泛应用于数据备份、代码审查与系统监控等领域,是保障数据完整性的关键技术手段。
195 0
|
测试技术 Python
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
732 31
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
|
存储 应用服务中间件 开发工具
对象存储OSS-Python设置代理访问请求
通过 Python SDK 配置 nginx 代理地址请求阿里云 OSS 存储桶服务。示例代码展示了如何使用 RAM 账号进行身份验证,并通过代理下载指定对象到本地文件。
637 15
|
对象存储
一个通过 GitHub Action 将 GitHub 仓库与阿里云 OSS 完全同步的脚本
一种将 GitHub 仓库完全同步到阿里云 OSS 的方法。
|
Python
Python实用记录(四):os模块-去后缀或者改后缀/指定目录下图片或者子目录图片写入txt/csv
本文介绍了如何使用Python的os模块来操作文件,包括更改文件后缀、分割文件路径和后缀、将指定目录下的所有图片写入txt文档,以及将指定目录下所有子目录中的图片写入csv文档,并为每个子目录分配一个标签。
286 1
|
编解码 UED Python
Python批量修改指定目录下图片的大小名文章
Python批量修改指定目录下图片的大小名文章
218 1
Python获取二级目录的第二文件名
Python获取二级目录的第二文件名
Python将目录分割成数组
Python将目录分割成数组

相关产品

  • 对象存储
  • 推荐镜像

    更多