首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为AWS命令的标记脚本的前缀参数动态生成值的bash解决方案

为AWS命令的标记脚本的前缀参数动态生成值的bash解决方案
EN

Stack Overflow用户
提问于 2021-09-10 17:23:55
回答 1查看 184关注 0票数 0

我在bash脚本中调用AWS命令。我需要向前缀为以下前缀的文件添加标记:

代码语言:javascript
复制
/base/user1/foo/file1
/base/user2/foo/fileA
/base/user3/foo/fileX

我只想删除"foo“下的文件,但是如果用户有以下文件:

代码语言:javascript
复制
/base/user1/bar/fileZ

,我不想删除那些“酒吧”。

我有个剧本:

!/bin/bash

代码语言:javascript
复制
aws s3api list-objects --bucket myBucket --query 'Contents[].{Key: Key}' --prefix myPrefix --output text  | xargs -n 1 aws s3api put-object-tagging  --bucket myBucket --tagging "{\"TagSet\": [{ \"Key\": \"myKey\", \"Value\": \"myValue\" }]}" --key

只要myPrefix是一个绝对路径,它就能正常工作,比如:

代码语言:javascript
复制
/base/user1/foo/

,但我有太多的用户无法手动执行此操作,因此我想做如下操作:

代码语言:javascript
复制
/base/*/foo/

作为前缀。但是,这会引发一个错误:

调用NoSuchKey操作时发生错误( PutObjectTagging ):指定的键不存在

循环中的bash有什么方法可以遍历到"foo“级别,这样我就可以拥有完整的路径:前缀/base/user3 1/foo//base/user3 2/foo,/ase/user3 3/foo为前缀动态定义?谢谢你的回应。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-13 18:23:55

我自己找到了一个像样的解决方案。取代原来员额中的这一行:

代码语言:javascript
复制
aws s3api list-objects --bucket myBucket --query 'Contents[].{Key: Key}' --prefix myPrefix --output text  | xargs -n 1 aws s3api put-object-tagging  --bucket myBucket --tagging "{\"TagSet\": [{ \"Key\": \"myKey\", \"Value\": \"myValue\" }]}" --key

,具体如下:

代码语言:javascript
复制
for BUCKET_PATH in $(aws s3 ls --recursive --summarize $BUCKET);
do
if [[ $BUCKET_PATH == *$PREFIX* ]]; then
  echo $BUCKET_PATH
  aws s3api put-object-tagging  --bucket ${BUCKET} --key ${BUCKET_PATH} --tagging "{\"TagSet\": [{ \"Key\": \"${KEY}\", \"Value\": \"${VALUE}\" }]}"
fi
done

效果很好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69135869

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档