S3 对象重命名

本文所述操作适用于兼容 S3 协议的所有存储框架,包括 AWS S3Aliyun OSSMinIOCeph 等。


不知为何,截止目前,S3 协议并不包含对象重命名的接口。如果有重命名对象的需求,一般能想到的就是重新上传改名之后的对象,然后从存储桶中将原名对象删除。很明显,这种方式好比大炮打蚊子,目的达到了,累得一身汗,要是本地没有备份,还得先下载,费时费力费钱。特别是当待处理的对象的数量相当庞大的时候,如果不想持续加班一个月,那就要琢磨琢磨另辟蹊径才行。

能不能将存储桶挂载到本地,然后用本地 shell 命令操作其中的对象呢?值得一试!

挂载

使用 rclones3fs-fusegoofys 等工具挂载,这里以 goofys 为例。

  1. 直接下载编译好的执行文件wget https://github.com/kahing/goofys/releases/latest/download/goofys
  2. 设置执行权限chmod +x goofys
  3. S3 密钥配置
mkdir ~/.aws
vi ~/.aws/credentials

# 以下是 ~/.aws/credentials 内容
[default]
aws_access_key_id = xxxxxxx
aws_secret_access_key = yyyyyyyy
  1. 创建挂载点mkdir /mnt/foo
  2. 挂载
mkdir /opt/goofys
./goofys --endpoint https://us-east.s3.aws.com bucketName /mnt/foo/
  1. 验证是否挂载成功。
# 列出前 10 个文件
ls /mnt/foo/ | head -n 10
# 注意:该语句并不能减少 ls 的执行时间。当文件数量过多时,可以使用通配符减少 ls 的罗列数量。

重命名

挂载成功之后,我们就可以采用 mvrename 指令尝试重命名文件了,下面以 perl 版本的 rename 为例(该版本支持正则表达式)。

# 所有文件名只保留后 5 个字符,并更改扩展名
rename 's/\w*?(\w{5})\.mdi/$1.obj/' *
# 实际也是逐个文件处理,而非一次性同时处理,文件多则耗时
# 如果文件太多则会报 "Argument list too long"(虽然参数只有一个星号,但实则是将所有文件名查找出来后执行),可以改成如下方式:
find . -name "*" | xargs rename 's/\w*?(\w{5})\.mdi/$1.obj/'
# 虽然不会报错,但其实只是将查找文件名环节转给了 find,总耗时是一样的

为了更好更灵活地重命名巨量文件,只能编写脚本了。以下是示例代码:

rename_s3_objects()
{
local renamedCnt=0
for obj in ./*
do
	rename 's/\w*?(\w{5})\.mdi/$1.obj/' $obj
	renamedCnt=$(($renamedCnt + 1))
	if [ `expr $renamedCnt % 100` -eq 0 ]; then
                # 每处理完 100 个对象就输出提示
		echo "$renamedCnt objects renamed"
	fi
done
return 0
}

rename_s3_objects

# 似乎 ``; $[]; $(()) 都可以执行运算

保存后,在命令行中使用 sh saved_file_name 执行即可。

经测算,在普通网络环境下,每重命名 100 个对象(大约 100M),耗时 70s 左右。并未检查过程中是否涉及到对象的传输(博主试验的服务器并没有带宽使用数据),推测应该是没有,有兴趣的朋友可以验证下。


除重命名外,类似于[批量]删除、创建文件夹( S3 中对象加斜杠前缀)等指令应该也可以通过挂载方式玩转。

原文链接:https://www.cnblogs.com/newton/p/17347917.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:S3 对象重命名 - Python技术站

(0)
上一篇 2023年4月25日
下一篇 2023年4月25日

相关文章

  • 人工智能打造充满创造力的新世界,华为云开发者日无锡站成功举办

    摘要:近日,华为云开发者日HDC.Cloud Day无锡站成功举行,开发者不仅聆听了华为云技术专家在生成式AI、元宇宙、AIoT、工业互联网等领域的前沿技术分享,还在KooLabs工作坊、展台等环节,亲身体验华为云产品的技术魅力。 3月21日,华为云开发者日HDC.Cloud Day无锡站成功举行,开发者不仅聆听了华为云技术专家在生成式AI、元宇宙、AIoT…

    云计算 2023年4月17日
    00
  • C#调用新浪微博API实例代码

    首先需要明确的是,要调用新浪微博API,需要先获取到新浪微博开放平台的App Key、App Secret以及授权后获得的Access Token。有了这些准备工作后,就可以使用C#语言来调用API了。 以下是C#调用新浪微博API的完整攻略: 步骤1:引入依赖库 在使用C#调用新浪微博API时,需要引入两个依赖库: RestSharp库:用于向API服务器…

    云计算 2023年5月17日
    00
  • 5G要来了 有啥不一样?高清电影1秒钟下载完

    5G要来了,有啥不一样?高清电影1秒钟下载完 什么是5G? 5G是第五代移动通信技术的缩写,是对现有4G网络的升级和优化。5G网络的优势在于传输速度更快、延迟更低,可以实现更高效稳定的通讯和更广泛的联网应用。 5G的优势 5G相较于4G的优势主要在于以下几个方面: 传输速度更快:5G传输速度更快,可达到每秒20G的峰值传输速率,并能平均达到10G。相比于4G…

    云计算 2023年5月17日
    00
  • 云计算核心技术剖析

             古人云:“不以规矩,无以成方圆”,也就是说,“方圆”再怎么精彩和美丽,都离不开“规矩”的积淀和约束,这个道理对云计算也同样适用,如果读者对云计算本 身有一定的认知和理解,那么就非常有助于今后对其相关的技术和产品的学习,而本章就是这样专注于云计算本身的章节。在本章的开始,将关注云计算的定义和特 点,接着将从思想和技术这方面来分析云计算的由来,…

    云计算 2023年4月11日
    00
  • 云钉一体加速,阿里云计算巢与钉钉深度融合、共建应用新生态

    ​简介:云合计划再升级,“云钉一体”战略按下加速键。 1月13日,阿里云宣布云合计划再升级,计算巢与钉钉深度融合互通,实现一键上云、一键上钉钉,助力软件厂商更快地完成技术升级,更好地专注于自身的产品创新和客户服务,为“云钉一体”战略按下加速键。 ​ 【图:云钉一体阿里云计算巢整合策略发布会】阿里巴巴集团副总裁、阿里云销售管理与生态发展部总经理郭继军在阿里云计…

    云计算 2023年4月12日
    00
  • Vue-Cli 3.0 中配置高德地图的两种方式

    下面是详细讲解“Vue-Cli 3.0 中配置高德地图的两种方式”的完整攻略: 介绍 Vue-Cli 3.0 是一个快速原型开发工具,为了让开发者更加方便快捷地使用第三方组件,它提供了一种插件机制。在这篇攻略中,我们将使用 Vue-Cli 3.0 来介绍如何配置高德地图,并提供了两种配置方式。 配置方式 第一种方式:直接引入高德地图 JavaScript A…

    云计算 2023年5月17日
    00
  • 解密Elasticsearch:深入探究这款搜索和分析引擎

    作者:京东保险 管顺利 开篇 最近使用Elasticsearch实现画像系统,实现的dmp的数据中台能力。同时调研了竞品的架构选型。以及重温了redis原理等。特此做一次es的总结和回顾。网上没看到有人用Elasticsearch来完成画像的。我来做第一次尝试。 背景说完,我们先思考一件事,使用内存系统做数据库。他的优点是什么?他的痛点是什么? 一、原理 这…

    云计算 2023年5月6日
    00
  • IBM SPSS Modeler 18 Premium 中文永久破解版安装教程(破解文件)

    IBM SPSS Modeler 18 Premium 中文永久破解版安装教程(破解文件) 完整攻略 IBM SPSS Modeler 18 Premium 是一款用于数据挖掘、预测分析和决策支持的软件,国内许多用户都需要中文版,但是官方并没有提供中文版,因此有用户会选择破解版。下面我们将分享如何安装和破解 IBM SPSS Modeler 18 Premi…

    云计算 2023年5月18日
    00
合作推广
合作推广
分享本页
返回顶部