我有数百万张需要重命名的图片。所有文件都有一个' C'部分文件名需要更改为较低的' c。
文件名模式:
如何使用AWS CLI和某种外卡来实现这一目标?
源和目标存储桶将是相同的。
答案 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}; 完成