amazon-s3 - prices - precio de amazon s3
¿Manera rápida de listar todos los archivos en el cubo de Amazon S3? (21)
CLI de AWS
Documentación para aws s3 ls
AWS lanzó recientemente sus herramientas de línea de comandos. Esto funciona muy parecido al boto y se puede instalar usando sudo easy_install awscli
o sudo pip install awscli
Una vez que haya instalado, puede simplemente ejecutar
aws s3 ls
Que le mostrará todos sus cubos disponibles
CreationTime Bucket
------------ ------
2013-07-11 17:08:50 mybucket
2013-07-24 14:55:44 mybucket2
A continuación, puede consultar un segmento específico para los archivos.
Comando :
aws s3 ls s3://mybucket
Salida :
Bucket: mybucket
Prefix:
LastWriteTime Length Name
------------- ------ ----
PRE somePrefix/
2013-07-25 17:06:27 88 test.txt
Esto le mostrará todos sus archivos.
Tengo un cubo amazon s3 que tiene decenas de miles de nombres de archivos en él. ¿Cuál es la forma más fácil de obtener un archivo de texto que enumera todos los nombres de archivo en el cubo?
Alternativamente, puede usar Minio Client aka mc. Su código abierto y compatible con AWS S3. Está disponible para Linux, Windows, Mac, FreeBSD.
Todo lo que tiene que hacer es ejecutar el comando mc ls para enumerar los contenidos.
$ mc ls s3/kline/ [2016-04-30 13:20:47 IST] 1.1MiB 1.jpg [2016-04-30 16:03:55 IST] 7.5KiB docker.png [2016-04-30 15:16:17 IST] 50KiB pi.png [2016-05-10 14:34:39 IST] 365KiB upton.pdf
Nota:
- s3: Alias para Amazon S3
- kline: nombre del cubo AWS S3
Instalar Minio Client Linux Descargar mc para:
- Intel de 64 bits desde https://dl.minio.io/client/mc/release/linux-amd64/mc
- Intel de 32 bits de https://dl.minio.io/client/mc/release/linux-386/mc
- ARM de 32 bits de https://dl.minio.io/client/mc/release/linux-arm/mc
$ chmod 755 mc $ ./mc --help
Configurar las credenciales de AWS con Minio Client
$ mc config host add mys3 https://s3.amazonaws.com BKIKJAA5BMMU2RHO6IBB V7f1CwQqAcwo80UEIJEjc5gVQUSSx5ohQ9GSrr12
Nota: reemplace mys3 con alias que le gustaría para esta cuenta y, BKIKJAA5BMMU2RHO6IBB, V7f1CwQqAcwo80UEIJEjc5gVQUSSx5ohQ9GSrr12 con su AWS ACCESS-KEY y SECRET-KEY
Espero eso ayude.
Descargo de responsabilidad: yo trabajo para Minio
Código en python usando la impresionante boto . El código devuelve una lista de archivos en un depósito y también maneja excepciones para los depósitos faltantes.
import boto
conn = boto.connect_s3( <ACCESS_KEY>, <SECRET_KEY> )
try:
bucket = conn.get_bucket( <BUCKET_NAME>, validate = True )
except boto.exception.S3ResponseError, e:
do_something() # The bucket does not exist, choose how to deal with it or raise the exception
return [ key.name.encode( "utf-8" ) for key in bucket.list() ]
No olvides reemplazar los <PLACE_HOLDERS> con tus valores.
Después de zach también recomendaría boto , pero necesitaba hacer una pequeña diferencia en su código:
conn = boto.connect_s3(''access-key'', ''secret''key'')
bucket = conn.lookup(''bucket-name'')
for key in bucket:
print key.name
El siguiente comando obtendrá todos los nombres de archivo de su depósito AWS S3 y escribirá en el archivo de texto en su directorio actual:
aws s3 ls s3://Bucketdirectory/Subdirectory/ | cat >> FileNames.txt
En Java, puede obtener las claves utilizando ListObjects (consulte la documentación de AWS )
FileWriter fileWriter;
BufferedWriter bufferedWriter;
// [...]
AmazonS3 s3client = new AmazonS3Client(new ProfileCredentialsProvider());
ListObjectsRequest listObjectsRequest = new ListObjectsRequest()
.withBucketName(bucketName)
.withPrefix("myprefix");
ObjectListing objectListing;
do {
objectListing = s3client.listObjects(listObjectsRequest);
for (S3ObjectSummary objectSummary :
objectListing.getObjectSummaries()) {
// write to file with e.g. a bufferedWriter
bufferedWriter.write(objectSummary.getKey());
}
listObjectsRequest.setMarker(objectListing.getNextMarker());
} while (objectListing.isTruncated());
En PHP puede obtener una lista completa de objetos AWS-S3 dentro de un cubo específico usando la siguiente llamada
$S3 = /Aws/S3/S3Client::factory(array(''region'' => $region,));
$iterator = $S3->getIterator(''ListObjects'', array(''Bucket'' => $bucket));
foreach ($iterator as $obj) {
echo $obj[''Key''];
}
Puede redirigir el resultado del código anterior a un archivo para obtener una lista de claves.
Hay dos formas de hacerlo. Usando Python
sesssion = boto3.Session(aws_access_key_id, aws_secret_access_key)
s3 = sesssion.resource(''s3'')
bucketName = ''testbucket133''
bucket = s3.Bucket(bucketName)
for obj in bucket.objects.all():
print(obj.key)
Otra forma es usar AWS cli para ello
aws s3 ls s3://{bucketname}
example : aws s3 ls s3://testbucket133
La manera MÁS FÁCIL de obtener un archivo de texto muy útil es descargar S3 Browser http://s3browser.com/ y usar el Web URLs Generator para generar una lista completa de rutas de enlace. Es muy útil e implica aproximadamente 3 clics.
-Browse to Folder
-Select All
-Generate Urls
La mejor de las suertes para ti.
Para los desarrolladores de Scala, aquí se trata de una función recursiva para ejecutar un escaneo completo y mapear los contenidos de un cubo de AmazonS3 usando el AWS SDK oficial para Java
import com.amazonaws.services.s3.AmazonS3Client
import com.amazonaws.services.s3.model.{S3ObjectSummary, ObjectListing, GetObjectRequest}
import scala.collection.JavaConversions.{collectionAsScalaIterable => asScala}
def map[T](s3: AmazonS3Client, bucket: String, prefix: String)(f: (S3ObjectSummary) => T) = {
def scan(acc:List[T], listing:ObjectListing): List[T] = {
val summaries = asScala[S3ObjectSummary](listing.getObjectSummaries())
val mapped = (for (summary <- summaries) yield f(summary)).toList
if (!listing.isTruncated) mapped.toList
else scan(acc ::: mapped, s3.listNextBatchOfObjects(listing))
}
scan(List(), s3.listObjects(bucket, prefix))
}
Para invocar la función de curry map()
, simplemente pase el objeto AmazonS3Client ya construido (y correctamente inicializado) (consulte la referencia oficial de AWS SDK para Java API ), el nombre del depósito y el nombre del prefijo en la primera lista de parámetros. También pase la función f()
que desea aplicar para mapear cada resumen de objeto en la segunda lista de parámetros.
Por ejemplo
val keyOwnerTuples = map(s3, bucket, prefix)(s => (s.getKey, s.getOwner))
devolverá la lista completa de tuplas (key, owner)
en ese cubo / prefijo
o
map(s3, "bucket", "prefix")(s => println(s))
como normalmente te acercarías por las Mónadas en Programación Funcional
Puede enumerar todos los archivos, en el cubo aws s3 usando el comando
aws s3 ls path/to/file
y para guardarlo en un archivo, use
aws s3 ls path/to/file >> save_result.txt
si desea agregar su resultado en un archivo de lo contrario:
aws s3 ls path/to/file > save_result.txt
si quieres borrar lo que estaba escrito antes
Funcionará tanto en Windows como en Linux.
Puede usar api s3 estándar -
aws s3 ls s3://root/folder1/folder2/
Tenga cuidado, Amazon lista solo devuelve 1000 archivos. Si desea iterar sobre todos los archivos, debe paginar los resultados usando marcadores:
En ruby usando aws-s3
bucket_name = ''yourBucket''
marker = ""
AWS::S3::Base.establish_connection!(
:access_key_id => ''your_access_key_id'',
:secret_access_key => ''your_secret_access_key''
)
loop do
objects = Bucket.objects(bucket_name, :marker=>marker, :max_keys=>1000)
break if objects.size == 0
marker = objects.last.key
objects.each do |obj|
puts "#{obj.key}"
end
end
fin
Espero que esto ayude, Vincent
Versión simplificada y actualizada de la respuesta de Scala por Paolo:
import scala.collection.JavaConversions.{collectionAsScalaIterable => asScala}
import com.amazonaws.services.s3.AmazonS3
import com.amazonaws.services.s3.model.{ListObjectsRequest, ObjectListing, S3ObjectSummary}
def buildListing(s3: AmazonS3, request: ListObjectsRequest): List[S3ObjectSummary] = {
def buildList(listIn: List[S3ObjectSummary], bucketList:ObjectListing): List[S3ObjectSummary] = {
val latestList: List[S3ObjectSummary] = bucketList.getObjectSummaries.toList
if (!bucketList.isTruncated) listIn ::: latestList
else buildList(listIn ::: latestList, s3.listNextBatchOfObjects(bucketList))
}
buildList(List(), s3.listObjects(request))
}
Eliminando los genéricos y utilizando la ListObjectRequest generada por los creadores de SDK.
Yo recomendaría usar boto . Entonces es un par de líneas rápidas de pitón :
from boto.s3.connection import S3Connection
conn = S3Connection(''access-key'',''secret-access-key'')
bucket = conn.get_bucket(''bucket'')
for key in bucket.list():
print key.name.encode(''utf-8'')
Guarde esto como list.py, abra una terminal y luego ejecute:
$ python list.py > results.txt
s3cmd es invaluable para este tipo de cosas
$ s3cmd ls -r s3://yourbucket/ | awk ''{print $4}'' > objects_in_bucket
Actualización 20-12-2016:
Este comando le dará una lista de todos los segmentos en AWS S3:
aws s3 ls
Este comando le dará una lista de todos dentro de un depósito AWS S3:
aws s3 ls bucket-name
Este comando colocará una lista de todos dentro de un depósito de AWS S3 ... dentro de un archivo de texto en su directorio actual:
aws s3 ls bucket-name | cat >> file-name.txt
# find like file listing for s3 files
aws s3api --profile <<profile-name>> /
--endpoint-url=<<end-point-url>> list-objects /
--bucket <<bucket-name>> --query ''Contents[].{Key: Key}''
aws s3api list-objects --bucket bucket-name
Para obtener más información, consulte aquí - http://docs.aws.amazon.com/cli/latest/reference/s3api/list-objects.html
function showUploads(){
if (!class_exists(''S3'')) require_once ''S3.php'';
// AWS access info
if (!defined(''awsAccessKey'')) define(''awsAccessKey'', ''234567665464tg'');
if (!defined(''awsSecretKey'')) define(''awsSecretKey'', ''dfshgfhfghdgfhrt463457'');
$bucketName = ''my_bucket1234'';
$s3 = new S3(awsAccessKey, awsSecretKey);
$contents = $s3->getBucket($bucketName);
echo "<hr/>List of Files in bucket : {$bucketName} <hr/>";
$n = 1;
foreach ($contents as $p => $v):
echo $p."<br/>";
$n++;
endforeach;
}
public static Dictionary<string, DateTime> ListBucketsByCreationDate(string AccessKey, string SecretKey)
{
return AWSClientFactory.CreateAmazonS3Client(AccessKey,
SecretKey).ListBuckets().Buckets.ToDictionary(s3Bucket => s3Bucket.BucketName,
s3Bucket => DateTime.Parse(s3Bucket.CreationDate));
}