У меня в S3 следующая структура папок. Есть ли способ рекурсивно удалить все файлы в определенной папке (скажем foo/bar1 or foo or foo/bar2/1
..)
foo/bar1/1/..
foo/bar1/2/..
foo/bar1/3/..
foo/bar2/1/..
foo/bar2/2/..
foo/bar2/3/..
У меня в S3 следующая структура папок. Есть ли способ рекурсивно удалить все файлы в определенной папке (скажем foo/bar1 or foo or foo/bar2/1
..)
foo/bar1/1/..
foo/bar1/2/..
foo/bar1/3/..
foo/bar2/1/..
foo/bar2/2/..
foo/bar2/3/..
С помощью новейших инструментов командной строки python aws-cli рекурсивное удаление всех файлов в папке в корзине просто:
aws s3 rm --recursive s3://your_bucket_name/foo/
Или удалите все, что находится под ведром:
aws s3 rm --recursive s3://your_bucket_name
Если вы действительно хотите удалить корзину, есть одношаговый ярлык:
aws s3 rb --force s3://your_bucket_name
который будет рекурсивно удалить содержимое этого ведра, а затем удалить его.
Примечание: s3://
для работы этих команд требуется префикс протокола.
rm
удалит только файлы, ноrb --force
удалит файлы и корзину.--recursive
удаляет папку.Раньше это требовало специального вызова API для каждого ключа (файла), но было значительно упрощено благодаря внедрению Amazon S3 - Multi-Object Delete в декабре 2011 года:
См. Мой ответ на связанный вопрос: удалить из S3 с использованием api php с использованием подстановочного знака, чтобы получить дополнительную информацию об этом и соответствующих примерах в PHP ( AWS SDK для PHP поддерживает это, начиная с версии 1.4.8 ).
Тем временем большинство клиентских библиотек AWS так или иначе внедрили специальную поддержку этой функции, например:
Python
Вы можете добиться этого с помощью отличного интерфейса Boto Python для AWS примерно следующим образом (непроверено, из верхней части моей головы):
import boto s3 = boto.connect_s3() bucket = s3.get_bucket("bucketname") bucketListResultSet = bucket.list(prefix="foo/bar") result = bucket.delete_keys([key.name for key in bucketListResultSet])
Рубин
Эта функция доступна начиная с версии 1,24 из AWS SDK для Ruby , и примечания к выпуску дают пример , а также:
bucket = AWS::S3.new.buckets['mybucket'] # delete a list of objects by keys, objects are deleted in batches of 1k per # request. Accepts strings, AWS::S3::S3Object, AWS::S3::ObectVersion and # hashes with :key and :version_id bucket.objects.delete('key1', 'key2', 'key3', ...) # delete all of the objects in a bucket (optionally with a common prefix as shown) bucket.objects.with_prefix('2009/').delete_all # conditional delete, loads and deletes objects in batches of 1k, only # deleting those that return true from the block bucket.objects.delete_if{|object| object.key =~ /\.pdf$/ } # empty the bucket and then delete the bucket, objects are deleted in batches of 1k bucket.delete!
Или:
источник
aws cli
ответ like @ number5Вы также можете рассмотреть возможность использования Amazon S3 Lifecycle для создания срока действия файлов с префиксом
foo/bar1
.Откройте консоль браузера S3 и щелкните корзину. Затем щелкните «Свойства», а затем «Жизненный цикл».
Создайте правило истечения срока для всех файлов с префиксом
foo/bar1
и установите дату на 1 день с момента создания файла.Сохраните, и все подходящие файлы будут удалены в течение 24 часов.
Только не забудьте удалить правило после того, как закончите!
Никаких вызовов API, никаких сторонних библиотек, приложений или скриптов.
Я просто так удалил несколько миллионов файлов.
Снимок экрана, показывающий окно правила жизненного цикла (обратите внимание, что на этом снимке префикс оставлен пустым, что влияет на все ключи в корзине):
источник
С
s3cmd
пакетом, установленным на машине Linux, вы можете сделать этоs3cmd rm s3://foo/bar --recursive
источник
s3cmd del s3://BUCKET/OBJECT
либо удаление целого ведраs3cmd rb s3://BUCKET
. Нетs3cmd rm
, по крайней мере согласноs3cmd --help
.s3cmd rm
находится в справке с 2019 года (как псевдоним del), это отличный ответ. Инструментыaws
cli работают только с/
префиксом завершения, но не с префиксом папки и частичным префиксом имени файла, тогда как s3cmd работает в обоих случаях. Этот ответ требует гораздо больше голосов, мне пришлось слишком далеко прокручивать, чтобы найти правильное решение.Если вы хотите удалить все объекты с префиксом "foo /" с помощью Java AWS SDK 2.0
источник
В случае использования AWS-SKD для ruby V2.
внимание пожалуйста, все "foo / *" в ведре удалятся.
источник
Я просто удалил все файлы из своей корзины с помощью PowerShell:
источник
Только что увидел, что Amazon добавила параметр «Как очистить ведро» в меню консоли AWS:
http://docs.aws.amazon.com/AmazonS3/latest/UG/DeletingaBucket.html
источник
В проголосованном ответе отсутствует шаг.
Per aws s3 help:
источник
Лучший способ - использовать правило жизненного цикла для удаления всего содержимого корзины. Программно вы можете использовать следующий код (PHP) для правила жизненного цикла PUT.
В этом случае все объекты будут удалены. Дата начала - «Сегодня полночь по Гринвичу».
Вы также можете указать Дни следующим образом. Но с Днями он будет ждать не менее 24 часов (минимум 1 день), чтобы начать удаление содержимого корзины.
источник
Мне нужно было сделать следующее ...
источник