我想从shell脚本中检查给定的s3键是否存在。
S3 Path:
========
s3://Bucket/test/names/12345/names-ca/one.txt
s3://Bucket/test/names/12346/names-ec/two.txt
我想检查s3://Bucket/test/names/12345是否存在。从shell中检查这个可能是更好的方法。
您可以使用awscli来测试S3中是否存在对象。例如:
aws s3api head-object --bucket mybucket --key dogs/snoopy.png
如果对象存在(并且您有权针对它发布HeadObject(,您将获得一个JSON响应和一个零返回代码。
下面是一个bash脚本示例:
#!/bin/bash
aws s3api head-object --bucket mybucket --key dogs/snoopy.png 1>/dev/null 2>&1
if [[ $? -eq 0 ]]; then
echo "S3 object exists"
else
echo "S3 object does not exist"
fi
要测试给定的S3前缀(如dogs/
(下是否有对象,可以发出:
aws s3 ls mybucket/dogs/ --recursive | grep -v "/$" | wc -l
输出将是S3对象的计数,例如0或2。你可以用正常的方式捕捉,例如:
COUNT=$(aws s3 ls mybucket/dogs/ --recursive | grep -v "/$" | wc -l | tr -d ' ')
if [[ $COUNT -eq "0" ]]; then
echo "No objects under dogs/"
else
echo "Some ($COUNT) objects under dogs/"
fi
如果使用默认以外的AWS凭据配置文件,请将--profile myprofile
附加到awscli命令。