AWS S3 CLI使用新名称移动文件

时间:2017-09-12 20:08:35

标签: amazon-s3 command-line aws-cli

我有数百万张需要重命名的图片。所有文件都有一个' C'部分文件名需要更改为较低的' c。

文件名模式:

  • ACD_112_2P-001-1 C .jpg应更改为ACD_112_2P-001-1 c .jpg
  • ACD_112_2P-002-2 C .jpg应更改为ACD_112_2P-002-2 c .jpg
  • ACD_112_2P-003-3 C .jpg应更改为ACD_112_2P-003-3 c .jpg

如何使用AWS CLI和某种外卡来实现这一目标?

源和目标存储桶将是相同的。

3 个答案:

答案 0 :(得分:1)

不,AWS CLI无法在一次通话中重命名多个文件。

每次重命名操作都需要单独的API调用。用程序(例如Python脚本)来完成它可能会更容易。该脚本可以检索对象列表(或者给它),然后通过Amazon S3 copy()调用对象更改为新名称,然后删除旧对象。

答案 1 :(得分:0)

使用aws cli和bash,您可以像这样重命名多个文件:

$ for f in $(aws s3api list-objects --bucket sample-bucket-1 --prefix "" --delimiter "" | grep replaceme | cut  -d ":" -f 2 | tr -d , | tr -d \";
do aws s3 mv s3://sample-bucket-1/$f s3://sample-bucket-1/${f/replaceme/replaced};
done

'replaceme'是您要替换的文件名的一部分,而'replaceme'是要在文件名中插入的内容。

以下将从响应中提取文件名:

 cut  -d ":" -f 2 | tr -d , | tr -d \"

如果文件位于存储桶中的文件夹内,则将文件夹名称放在前缀中:

--prefix "folder_name/sub_folder_name"

从这里编辑: http://gerardvivancos.com/2016/04/12/Single-and-Bulk-Renaming-of-Objects-in-Amazon-S3/

答案 2 :(得分:0)

很好用! 您缺少最后一个的循环

$ for $ in f(aws s3api list-objects --bucket sample-bucket-1 --prefix“” --delimiter“” | grep replaceme | cut -d“:” -f 2 | tr -d, | tr -d \“ ; 做as s3 mv s3:// sample-bucket-1 / $ f s3:// sample-bucket-1 / $ {f / replaceme / replaced}; 完成

$ for $ in f(aws s3api list-objects --bucket sample-bucket-1 --prefix“” --delimiter“” | grep replaceme | cut -d“:” -f 2 | tr -d, | tr -d \“; 做as s3 mv s3:// sample-bucket-1 / $ f s3:// sample-bucket-1 / $ {f / replaceme / replaced}; 完成