¿Cómo utilizar la CLI de AWS S3 para volcar archivos a la salida estándar en BASH?


93

Estoy iniciando un script bash que tomará una ruta en S3 (como se especifica en el comando ls ) y volcará el contenido de todos los objetos de archivo en stdout. Básicamente, me gustaría replicar, cat /path/to/files/*excepto para S3, por ejemplo s3cat '/bucket/path/to/files/*'. Mi primera inclinación al mirar las opciones es usar el cpcomando en un archivo temporal y luego cateso.

¿Alguien ha probado esto o algo similar o ya hay un comando que no encuentro que lo hace?


Utilizo PHP y la clase Services_Amazon_S3 para hacer cosas similares.
Mal entendido

Respuestas:


152

volcar el contenido de todos los objetos de archivo a stdout.

Puede lograr esto si pasa -por destino de aws s3 cpcomando. Por ejemplo $ aws s3 cp s3://mybucket/stream.txt -,.

¿Qué estás intentando hacer es algo como esto? ::

#!/bin/bash

BUCKET=YOUR-BUCKET-NAME
for key in `aws s3api list-objects --bucket $BUCKET --prefix bucket/path/to/files/ | jq -r '.Contents[].Key'`
do
  echo $key
  aws s3 cp s3://$BUCKET/$key - | md5sum
done

5
Sin embargo, tenga en cuenta que '-' como marcador de posición para stdout no funciona en todas las versiones de awscli. Por ejemplo, la versión 1.2.9, que viene con ubuntu LTS 14.04.2, no lo admite.
antoniob

Lo mismo ocurre con eso. Estoy en Ubuntu 12.xy no funciona en mi instancia de bash.
Kode Charlie

El problema con esto es que no puede obtener una versión específica del archivo.
Eamorr

no funciona en MacOS High Sierra 10.13.6 o bien ( aws --version: aws-cli/1.15.40 Python/3.6.5 Darwin/17.7.0 botocore/1.10.40)
MichaelChirico

esta respuesta también tiene la ventaja de que el contenido del archivo se transmitirá a su terminal y no se copiará como un todo. ver más en loige.co/aws-command-line-s3-content-from-stdin-or-to-stdout/…
Khoa

47

Si está utilizando una versión de la AWS CLI que no admite la copia en "-", también puede utilizar / dev / stdout:

$ aws s3 cp --quiet s3://mybucket/stream.txt /dev/stdout

También puede querer que la --quietbandera evite que una línea de resumen como la siguiente se agregue a su salida:

descargar: s3: //mybucket/stream.txt a ../../dev/stdout


1

Puede intentar usar s3streamcat , también es compatible con los formatos bzip, gzip y xz.

Instalar con

sudo pip install s3streamcat

Uso:

s3streamcat s3://bucketname/dir/file_path
s3streamcat s3://bucketname/dir/file_path | more
s3streamcat s3://bucketname/dir/file_path | grep something


-3

Si desea lograr esto usando BASH, deberá llamar a una aplicación externa como la AWS Command-Line Interface (CLI). No tiene un equivalente CAT, por lo que deberá copiar el archivo localmente y luego CAT.

Alternativamente, puede usar / escribir una aplicación que llame directamente al AWS SDK, que está disponible para lenguajes como Python, PHP, Java. Al usar el SDK, el contenido del archivo se puede recuperar en la memoria y luego enviarlo a la salida estándar.


La respuesta anterior enumera que puede usar 'cp' con '-' como el segundo argumento de archivo para que envíe el archivo a stdout.
Asfand Qazi
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.