AWS S3: как проверить, существует ли файл в ведре с помощью bash
Я хотел бы знать, можно ли проверить, есть ли определенные файлы в определенном ведре.
вот что я нашел:
проверка, если файл находится в ведре S3 с помощью s3cmd
это должно исправить мою проблему, но по какой-то причине он продолжает возвращаться, что файл не существует, хотя это так. Это решение также немного устарело и не использует
doesObjectExist
метод.
резюме всех методы, которые можно использовать в веб-службе Amazon S3
Это дает синтаксис того, как использовать этот метод, но я не могу заставить его работать.
они ожидают, что вы сделаете логическую переменную для сохранения статуса метода,или функция непосредственно дает вам вывод / бросок ошибки?
Это код, который я сейчас использую в своем скрипте bash:
existBool=doesObjectExist(${BucketName}, backup_${DomainName}_${CurrentDate}.zip)
if $existBool ; then
echo 'No worries, the file exists.'
fi
Я проверил его, используя только имя из файла, вместо того, чтобы давать полный путь. Но поскольку ошибка, которую я получаю, является синтаксической ошибкой, я, вероятно, просто использую ее неправильно.
надеюсь, кто-то может помочь мне и скажите мне, что я делаю неправильно.
!Edit
Я закончил тем, что искал другой способ сделать это с помощью doesObjectExist
Не самый быстрый и простой.
3 ответов
один простой способ-использовать aws s3 ls
exists=$(aws s3 ls $path_to_file)
if [ -z "$exists" ]; then
echo "it does not exist"
else
echo "it exists"
fi
в последний раз я видел сравнение производительности getObjectMetadata
самый быстрый способ проверить, если объект существует. Используя AWS cli, это будет head-object
метод, пример:
aws s3api head-object --bucket www.codeengine.com --key index.html
возвращает:
{
"AcceptRanges": "bytes",
"ContentType": "text/html; charset=utf-8",
"LastModified": "Sun, 08 Jan 2017 22:49:19 GMT",
"ContentLength": 38106,
"ContentEncoding": "gzip",
"ETag": "\"bda80810592763dcaa8627d44c2bf8bb\"",
"StorageClass": "REDUCED_REDUNDANCY",
"CacheControl": "no-cache, no-store",
"Metadata": {}
}
обратите внимание, что" aws s3 ls " не совсем работает, хотя ответ был принят. Он выполняет поиск по префиксу, а не по определенному ключу объекта. Я обнаружил это сложным способом, когда кто-то переименовал файл, добавив " 1 " в конец имени файла, и проверка существования все равно вернет True.
(попытался добавить это в качестве комментария,но пока недостаточно.)