Я не пишу много сценариев bash, особенно с AWS, поэтому могу использовать некоторую помощь.
Результаты включения AWS S3 Ведение журнала с контролем версий одновременно и в итоге он сгенерировал более 70000 файлов журналов (радость), а затем попытка удаления устанавливает только маркер удаления файла.
Сценарий оболочки bash, представленный ниже, прекрасно работает для удаления всех версий объектов / файлов S3 и удаления маркеры в данном сегменте.
Проблема в том, что мне нужно сохранить 25 ГБ реальных / le git файлов, но мне нужно удалить 70000 версий файлов журналов с маркерами удаления, которые были смешаны.
Это больше ничего не делает, потому что они версионные и уже имеют маркеры удаления: aws s3 rm s3: // MYBUCKETNAME / --exclude "" --include "2020- "
Не думайте, что срок действия LifeCycle истек все будет работать, потому что действительные файлы смешиваются с действительными файлами до и после, единственное, что я могу думать о том, что может сработать, - это удалить файлы, начинающиеся с «2020-» (НО, только на верхнем уровне, НЕ рекурсивно .)
Итак, я хочу изменить скрипт ниже, чтобы удалить только те файлы, которые начинаются с «2020-» (НО, только на верхнем уровне), то есть все файлы журналов, случайно созданные на контейнер S3.
2020-01-25-07-33-44-DAC13CC9B600B11A 2020-01-25-07-33-46-59F44EEC6F93E8C7 2020-01-25-07-33-47-786A5091CABF6912 ... et c ...
#!/bin/bash
#USAGE: sh delete_all_object_versions.sh MYBUCKETNAME
bucket=$1
set -e
echo "Removing all versions from $bucket"
versions=`aws s3api list-object-versions --bucket $bucket |jq '.Versions'`
markers=`aws s3api list-object-versions --bucket $bucket |jq '.DeleteMarkers'`
echo "removing files"
for version in $(echo "${versions}" | jq -r '.[] | @base64'); do
version=$(echo ${version} | base64 --decode)
key=`echo $version | jq -r .Key`
versionId=`echo $version | jq -r .VersionId `
cmd="aws s3api delete-object --bucket $bucket --key $key --version-id $versionId"
echo $cmd
$cmd
done
echo "removing delete markers"
for marker in $(echo "${markers}" | jq -r '.[] | @base64'); do
marker=$(echo ${marker} | base64 --decode)
key=`echo $marker | jq -r .Key`
versionId=`echo $marker | jq -r .VersionId `
cmd="aws s3api delete-object --bucket $bucket --key $key --version-id $versionId"
echo $cmd
$cmd
done