Amazon S3文件名:将所有文件中的双空格替换

16 浏览
0 Comments

Amazon S3文件名:将所有文件中的双空格替换

我在亚马逊S3上有一个存储着成千上万个文件的桶,它们的名称中都包含着双空格。

我怎样才能将所有的双空格替换成一个空格呢?

例如:folder1/folder2/file name.pdf 替换为 folder1/folder2/file name.pdf

admin 更改状态以发布 2023年5月20日
0
0 Comments

根据 @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的路径列表
  • 剪切结果,仅获取文件路径
  • 搜索包含双空格的所有路径
  • 移动到新路径并仅保留一个空格
0
0 Comments

选项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)编写一个脚本来:

  • 列出存储桶
  • 循环遍历每个对象
  • 如果对象键具有双空格:
    • 将对象复制到新键
    • 删除原始对象
0