【问题标题】:Amazon S3 filenames: Replace double spaces from all filesAmazon S3 文件名:替换所有文件中的双空格
【发布时间】:2021-09-11 11:15:27
【问题描述】:

我在 Amazon S3 上有一个存储桶,其中包含数千个名称中包含双空格的文件。

如何用一个空格替换所有的双空格?

点赞:folder1/folder2/file name.pdffolder1/folder2/file name.pdf

【问题讨论】:

  • 将文件从原始名称/位置复制到目标/所需的位置。然后删除旧文件。对每个文件都这样做。
  • 但是我有4000多个文件
  • 然后为它写一个脚本。

标签: amazon-web-services amazon-s3


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    根据@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) 
    
    • 获取桶的列表路径
    • 剪切结果得到唯一的文件路径
    • 搜索所有包含双空格的路径
    • 移动到一个空格的新路径

    【讨论】:

      猜你喜欢
      • 2017-01-06
      • 2014-01-14
      • 2010-12-20
      • 1970-01-01
      • 2016-10-30
      • 2011-04-07
      • 2021-03-11
      • 1970-01-01
      • 2014-11-11
      相关资源
      最近更新 更多