Home > Amazon-AWS, HowTo > s3 delete script

s3 delete script

August 24th, 2015 Leave a comment Go to comments

How about if you need to delete large quantities of files inside a S3 bucket.
In my case it was about 5 millions files.
Using a python script.

p>Here is the code:

# coding: utf-8
# Original by Bruno Mentges

import time
from boto.s3.connection import S3Connection
access_key = 'asd'
secret_key = 'asd'


#File containing, each line
#/path/172737/file13123.jpg;/path/172737/file13123.jpg;/path/172737/file13123.jpg
nome_arquivo = "/root/bin/list/list.csv"

print "Processing list"
objetos_s3 = []
with open(nome_arquivo, "r") as f:
    for linha in f:
        objetos_s3.extend(map(lambda x: x.split("http:///")[-1], linha.split(";")))

print "Numero de urls a apagar: %d" % len(objetos_s3)

f = lambda A, n=1000: [A[i:i+n] for i in range(0, len(A), n)]
mil_em_mil = f(objetos_s3)

print "Tamanho do array teste: %d" % len(mil_em_mil)
print "Tamanho do primeiro item do array teste: %d" % len(mil_em_mil[0])
print "Tamanho do ultimo item do array teste: %d" % len(mil_em_mil[-1])

conn = S3Connection(access_key, secret_key)

try_bucket = conn.lookup('')

if try_bucket is None:
    print "Bucket nao encontrado"
else:
    bucket = conn.get_bucket('')
    resultados = []

    print "Iniciando envio dos requests..."
    counter = 1
    for keys_to_delete in mil_em_mil:
	t0 = time.time()
        print "Enviando request numero %d. Quantidade de chaves a deletar: %d" % (counter, len(keys_to_delete))
        
        # resultado terao so as keys que deram erro (quiet=True) // mais rapido
        resultado = bucket.delete_keys(keys_to_delete, quiet=True)
        resultados.append(resultado)
        erros = 0
        if resultado:
 	    erros = len(resultado.errors)
        
	t1 = time.time()
        print "Finalizado o envio numero %d, qtd erros: %d, tempo: %s" % (counter, erros, str(t1-t0))
        counter += 1

    print "Keys que deram erro, abaixo: "
    for resultado in resultados:
        # boto.s3.multidelete.MultiDeleteResult 
        if resultado and len(resultado.errors) > 0:
        	print resultado.errors

print "Fim do processamento, sucesso!"

Categories: Amazon-AWS, HowTo Tags:
  1. No comments yet.
  1. No trackbacks yet.

VAMOVE *

*