bash 为 AWS CLI 命令的标记脚本的前缀参数动态构建值的解决方案
bash solution to dynamically build value for prefix parameter of my tagging script for AWS CLI commands
我在 bash 脚本中调用 AWS CLI 命令。我需要给前缀如下的文件添加标签:
/base/user1/foo/file1
/base/user2/foo/fileA
/base/user3/foo/fileX
我只想删除“foo”下的那些,但是如果用户有这样的文件:
/base/user1/bar/fileZ
,我不想删除“栏”下的那些。
我有一个脚本:
!/bin/bash
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 是绝对路径就可以正常工作,例如:
/base/user1/foo/
,但我有太多用户无法手动执行此操作,所以我想做类似的事情:
/base/*/foo/
为前缀。但是,这会引发错误:
调用PutObjectTagging操作时发生错误(NoSuchKey):指定的key不存在
在 bash 中有没有办法在循环中或向下遍历到“foo”级别的东西,以便我可以获得完整路径:prefix /base/user1/foo/, /base/user2/foo, /ase/user3/foo动态定义前缀?感谢您的任何回复。
我能够自己找到一个像样的解决方案。从原来的 post:
替换这一行
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
,具有以下内容:
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
效果很好。
我在 bash 脚本中调用 AWS CLI 命令。我需要给前缀如下的文件添加标签:
/base/user1/foo/file1
/base/user2/foo/fileA
/base/user3/foo/fileX
我只想删除“foo”下的那些,但是如果用户有这样的文件:
/base/user1/bar/fileZ
,我不想删除“栏”下的那些。
我有一个脚本:
!/bin/bash
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 是绝对路径就可以正常工作,例如:
/base/user1/foo/
,但我有太多用户无法手动执行此操作,所以我想做类似的事情:
/base/*/foo/
为前缀。但是,这会引发错误:
调用PutObjectTagging操作时发生错误(NoSuchKey):指定的key不存在
在 bash 中有没有办法在循环中或向下遍历到“foo”级别的东西,以便我可以获得完整路径:prefix /base/user1/foo/, /base/user2/foo, /ase/user3/foo动态定义前缀?感谢您的任何回复。
我能够自己找到一个像样的解决方案。从原来的 post:
替换这一行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
,具有以下内容:
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
效果很好。