当前位置: 首页 > news >正文

如何把指定阿里云文件夹下的所有文件移动到另一个文件夹下,移动文件时把文件名称(不包括文件后缀)进行md5编码

如何把指定阿里云文件夹下的所有文件移动到另一个文件夹下,移动文件时把文件名称(不包括文件后缀)进行md5编码。
安装SDK:

bash
pip install oss2
编写Python脚本:

 # 认证信息
# 认证信息
auth = oss2.Auth('YOUR_ACCESS_KEY_ID', 'YOUR_ACCESS_KEY_SECRET')
bucket_name = 'YOUR_BUCKET_NAME'
endpoint = 'https://oss-cn-hangzhou.aliyuncs.com' # 替换为你的Region的Endpointbucket = oss2.Bucket(auth, endpoint, bucket_name)# 源目录和目标目录source_prefix = 'house_mp4/'target_prefix = 'house/'print("=" * 60)print("开始安全的文件重命名和移动操作")print("=" * 60)processed_count = 0error_count = 0skipped_count = 0try:for obj in oss2.ObjectIterator(bucket, prefix=source_prefix):if obj.key == source_prefix:continueold_key = obj.keyprint(f"\n🔍 处理: {old_key}")old_name = old_key.split('/')[-1]if not old_name.lower().endswith(('.mp4', '.mov', '.avi', '.mkv')):print("⏭️  跳过非视频文件")skipped_count += 1continue# URL解码decoded_name = urllib.parse.unquote(old_name)# 分离文件名和扩展名if '.' in decoded_name:file_base_name, file_extension = decoded_name.rsplit('.', 1)else:file_base_name, file_extension = decoded_name, ''# MD5编码md5_hash = hashlib.md5(file_base_name.encode('utf-8')).hexdigest()# 构建新文件名new_file_name = f"{md5_hash}.{file_extension}" if file_extension else md5_hashnew_key = target_prefix + new_file_name# 检查目标是否存在if bucket.object_exists(new_key):print(f"⚠️  目标已存在,跳过: {new_file_name}")skipped_count += 1continue# print(f"✅ 成功: {old_name} -> {new_file_name}")# break# 执行操作try:print(f"📋 复制: {old_key} -> {new_key}")bucket.copy_object(bucket_name, old_key, new_key)print(f"🗑️  删除原文件: {old_key}")bucket.delete_object(old_key)print(f"✅ 成功: {old_name} -> {new_file_name}")processed_count += 1# 添加短暂延迟,避免API限制time.sleep(0.1)# breakexcept Exception as e:print(f"❌ 操作失败: {e}")error_count += 1continueexcept Exception as e:print(f"💥 严重错误: {e}")# 输出统计信息print("\n" + "=" * 60)print("处理统计:")print(f"✅ 成功处理: {processed_count} 个文件")print(f"⚠️  跳过: {skipped_count} 个文件")print(f"❌ 错误: {error_count} 个文件")print("=" * 60)
http://www.dtcms.com/a/361487.html

相关文章:

  • @Autowired注入底层原理
  • 吴恩达机器学习补充:决策树和随机森林
  • AUTOSAR AP R24-11 Log and Trace 文档总结
  • 贪心算法解决钱币找零问题(二)
  • CentOS10安装RabbitMQ
  • [特殊字符]【C语言】超全C语言字符串处理函数指南:从原理到实战
  • ARM的编程模型
  • TikTok Shop 物流拖后腿?海外仓系统破解物流困局
  • nginx是什么?
  • MQ使用场景分析
  • OpenHarmony 分布式感知中枢深度拆解:MSDP 框架从 0 到 1 的实战指南
  • 2025年- H104-Lc212--455.分发饼干(贪心)--Java版
  • 电动自行车淋水安全测试的关键利器:整车淋水性能测试装置的技术分析
  • 零基础深度学习技术学习指南:从入门到实践的完整路径
  • 大语言模型对齐
  • 中宇联SASE解决方案荣获最佳实践奖,助力国际零售企业数字化转型
  • 像信号处理一样理解中断:STM32与RK3399中断机制对比及 Linux 驱动开发实战
  • Kali自带的录屏工具:recordmydesktop
  • 响应式编程框架Reactor【8】
  • LINUX 91 SHELL:删除空文件夹 计数
  • 【C++】内存管理机制:从new到delete全解析
  • 如何对嵌入式软件进行单元测试
  • 增强现实—Gated-attention architectures for task-oriented language grounding
  • 8K4K图像评估平台
  • Shader开发(十九)统一变量纹理亮度调节
  • 永磁同步电机无速度算法--高频脉振方波注入法(新型位置跟踪策略)
  • Linux常用命令行大全:14个核心指令详解+实战案例
  • 第8篇c++Expression: (L“Buffer is too small“ 0
  • LintCode第401题-排序矩阵中的从小到大第k个数
  • ESP32驱动数字麦克风INMP441