N99*_*909 2 shell amazon-s3 amazon-web-services
我想检查 shell 脚本中是否存在给定的 s3 密钥。
S3 Path:
========
s3://Bucket/test/names/12345/names-ca/one.txt
s3://Bucket/test/names/12346/names-ec/two.txt
Run Code Online (Sandbox Code Playgroud)
我想检查 s3://Bucket/test/names/12345 是否存在。有什么更好的方法可以从 shell 中检查这个。
您可以使用 awscli 测试 S3 中是否存在对象。例如:
aws s3api head-object --bucket mybucket --key dogs/snoopy.png
Run Code Online (Sandbox Code Playgroud)
如果该对象存在(并且您有权针对它发出 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
Run Code Online (Sandbox Code Playgroud)
要测试给定 S3 前缀(例如 )下是否存在对象dogs/,您可以发出:
aws s3 ls mybucket/dogs/ --recursive | grep -v "\/$" | wc -l
Run Code Online (Sandbox Code Playgroud)
输出将是 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
Run Code Online (Sandbox Code Playgroud)
如果使用默认配置文件以外的 AWS 凭证配置文件,请附加--profile myprofile到 awscli 命令。