如何从 shell 脚本检查给定的 Amazon S3 密钥是否存在

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 中检查这个。

jar*_*mod 5

您可以使用 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 命令。