如何把指定阿里云文件夹下的所有文件移动到另一个文件夹下,移动文件时把文件名称(不包括文件后缀)进行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的Endpoint

    bucket = oss2.Bucket(auth, endpoint, bucket_name)


    # 源目录和目标目录
    source_prefix = 'house_mp4/'
    target_prefix = 'house/'
    print("=" * 60)
    print("开始安全的文件重命名和移动操作")
    print("=" * 60)
    
    processed_count = 0
    error_count = 0
    skipped_count = 0
    
    try:
        for obj in oss2.ObjectIterator(bucket, prefix=source_prefix):
            if obj.key == source_prefix:
                continue
                
            old_key = obj.key
            print(f"\n🔍 处理: {old_key}")
            
            old_name = old_key.split('/')[-1]
            
            if not old_name.lower().endswith(('.mp4', '.mov', '.avi', '.mkv')):
                print("⏭️  跳过非视频文件")
                skipped_count += 1
                continue
            
            # 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_hash
            new_key = target_prefix + new_file_name
            
            # 检查目标是否存在
            if bucket.object_exists(new_key):
                print(f"⚠️  目标已存在,跳过: {new_file_name}")
                skipped_count += 1
                continue
            # 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)
                # break
                
            except Exception as e:
                print(f"❌ 操作失败: {e}")
                error_count += 1
                continue
                
    except Exception as e:
        print(f"💥 严重错误: {e}")
    
    # 输出统计信息
    print("\n" + "=" * 60)
    print("处理统计:")
    print(f"✅ 成功处理: {processed_count} 个文件")
    print(f"⚠️  跳过: {skipped_count} 个文件")
    print(f"❌ 错误: {error_count} 个文件")
    print("=" * 60)
相关推荐
zl9798991 小时前
MySQL-锁
数据库·mysql·database
Codeking__1 小时前
mysql——事务(下)
数据库·mysql
白-胖-子2 小时前
阿里云 “封神” 组件:云平台监控告警的智能中枢
阿里云·云计算·阿里云封神
数智顾问2 小时前
时序数据库选型指南:Apache IoTDB引领数字化转型新时代——核心概念与关键技术解析
数据库
星环科技TDH社区版3 小时前
星环科技TDH社区版详解:从零搭建企业级大数据平台
大数据·数据库·分布式·数据存储与处理
老纪的技术唠嗑局3 小时前
分布式数据库迁移OceanBase——基于网易云音乐自研CDC服务的平滑迁移方案
数据库·分布式
武子康3 小时前
Java-131 深入浅出 MySQL MyCat 深入解析 schema.xml 配置详解:逻辑库、逻辑表、数据节点全攻略
xml·java·数据库·mysql·性能优化·系统架构·mycat
yookay zhang3 小时前
达梦数据库安装过程报错解决
数据库
荣光波比4 小时前
自动化运维工具 Ansible:集中化管理服务器完全指南
运维·自动化·云计算·ansible
Paraverse平行云4 小时前
实时云渲染云推流突破UE像素流传输数据单个消息64KB限制
云计算·webrtc·unreal engine