Isso costumava exigir uma chamada de API dedicada por chave (arquivo), mas foi muito simplificado devido à introdução do Amazon S3 - Multi-Object Delete em dezembro de 2011:
O novo Multi-Object Delete do Amazon S3 oferece a capacidade de excluir até 1000 objetos de um bucket do S3 com uma única solicitação.
Veja minha resposta à pergunta relacionada delete from S3 using api php using wildcard para obter mais informações sobre este e respectivos exemplos em PHP (o SDK da AWS para PHP suporta isso desde a versão 1.4.8 ).
A maioria das bibliotecas cliente da AWS, entretanto, introduziu suporte dedicado para esta funcionalidade de uma forma ou de outra, por exemplo:
Pitão
Você pode conseguir isso com a excelente interface boto Python para AWS mais ou menos da seguinte maneira (não testado, do topo da minha cabeça):
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])
Rubi
Isso está disponível desde a versão 1.24 do SDK da AWS para Ruby e as notas de versão também fornecem um exemplo:
bucket = AWS::S3.new.buckets['mybucket']
bucket.objects.delete('key1', 'key2', 'key3', ...)
bucket.objects.with_prefix('2009/').delete_all
bucket.objects.delete_if{|object| object.key =~ /\.pdf$/ }
bucket.delete!
Ou:
AWS::S3::Bucket.delete('your_bucket', :force => true)