Amazon S3文件名:将所有文件中的双空格替换
Amazon S3文件名:将所有文件中的双空格替换
我在亚马逊S3上有一个存储着成千上万个文件的桶,它们的名称中都包含着双空格。
我怎样才能将所有的双空格替换成一个空格呢?
例如:folder1/folder2/file name.pdf
替换为 folder1/folder2/file name.pdf
admin 更改状态以发布 2023年5月20日
根据 @john-rotenstein 的想法
我建立了一个Bash命令,可以在一行中完成以下操作:
aws s3 ls --recursive s3://bucket-name | cut -c32- | grep "\/.* .*" | (IFS='' ; while read -r line ; do aws s3 mv s3://bucket-name/"$line" s3://bucket-name/$(echo "$line" | xargs) --recursive; done)
- 获取Bucket的路径列表
- 剪切结果,仅获取文件路径
- 搜索包含双空格的所有路径
- 移动到新路径并仅保留一个空格
选项1:使用电子表格
我有时使用的“作弊方法”是创建电子表格并生成命令:
- 提取所有具有双空格的文件列表:
aws s3api list-objects --bucket bucket-name --query 'Contents[].[Key]' --output text | grep '\ \ ' >file_list.csv
- 在Excel中打开文件
- 在B列中编写公式,创建
aws s3 mv
命令:
="aws s3 mv 's3://bucket-name/"&A1&"' 's3://bucket-name/"&SUBSTITUTE(A1," "," ")&"'"
- 通过复制输出并在终端中运行它来进行测试
- 如果它工作了,请向下复制到其他行,将所有命令复制并粘贴到shell脚本中,然后运行shell脚本
选项2:编写脚本
或者,你可以用你喜欢的语言(如Python)编写一个脚本来:
- 列出存储桶
- 循环遍历每个对象
- 如果对象键具有双空格:
- 将对象复制到新键
- 删除原始对象