このディレクトリには、/data/files/
次の何千ものファイルがあります。
1test
2test
3test
[...]
60000test
60001test
AWS CLI
.
/data/files/
S3バケットのファイルがS3バケットにあるかどうかを確認できますか?不足しているファイルがS3にコピーされない場合はどうなりますか?
私はBASHを使ってこれを行うことを好みます。また、AWS CLI を別の CLI に変更する必要がある場合でも問題ありません。
答え1
aws s3 ls
実際のファイル名でこれを行う場合。ファイル名がある場合、終了コードは0になり、ファイル名は表示されます。それ以外の場合、終了コードはゼロではありません。
aws s3 ls s3://bucket/filname
if [[ $? -ne 0 ]]; then
echo "File does not exist"
fi
答え2
最初の答えは似ていますが、shebangで-eを使用するとスクリプトが失敗するので、最後に欲しいものです。単語数を使用するのが最善です。したがって、次のコマンドを使用できます。
wordcount=`aws s3 ls s3://${S3_BUCKET_NAME}/${folder}/|grep $${file}|wc -c`
echo wordcount=${wordcount}
if [[ "${wordcount}" -eq 0 ]]; then
do something
else
do something
fi
答え3
以下を試してください。
aws s3api head-object --bucket ${S3_BUCKET} --key ${S3_KEY}
検索するメタデータオブジェクト自体を検索しなくても、オブジェクトに関する情報を取得できます。読み取り(s3:オブジェクトのインポート)アクセスが必要です。 。
答え4
ファイルのサイズを知りたいのですが、ファイルが存在するかどうかを知りたいと思うかもしれません。
この関数はファイルサイズを取得し、エコーに「返す」。
s3_file_size() {
if command -v aws &> /dev/null; then
echo "$(aws s3 ls "${1}" --summarize | grep "Total.*Size" | grep -o -E '[0-9]+')"
return 0
else
echo "Warn-${FUNCNAME[0]}, AWS command missing."
return 1
fi
}
この関数は他の関数を使用して、ファイルサイズが0のファイルを受け取ったことを確認します。これは、ファイルが本質的に存在しないことを意味します。 (はい、サイズ0のファイルは存在しないと見なされます)
s3_does_file_exist() {
if command -v aws &> /dev/null; then
[[ $(s3_file_size "${1}") -lt 1 ]] && return 1 || return 0
else
echo "Warn-${FUNCNAME[0]}, AWS command missing."
return 1
fi
}