Use s3api con jq (AWS docu aws s3api list-objects):
Este modo siempre es recursivo.
$ aws s3api list-objects --bucket "bucket" | jq -r '.Contents[].Key'
a.txt
foo.zip
foo/bar/.baz/a
[...]
Puede filtrar subdirectorios agregando un prefijo (aquí foo
directorio). El prefijo no debe comenzar con un /
.
$ aws s3api list-objects --bucket "bucket" --prefix "foo/" | jq -r '.Contents[].Key'
foo/bar/.baz/a
foo/bar/.baz/b
foo/bar/.baz/c
[...]
jq Opciones:
-r
=Modo sin formato, sin comillas en la salida.Contents[]
=ObtenerContents
Contenido de la matriz de objetos.Key
=Obtener todos los campos clave (no produce una matriz JSON válida, pero estamos en modo sin formato, por lo que no nos importa)
Anexo :
Puede usar AWS CLI puro, pero los valores estarán separados por \x09
=Pestaña horizontal (AWS:control de la salida de comandos desde la CLI de AWS - formato de salida de texto)
$ aws s3api list-objects --bucket "bucket" --prefix "foo/" --query "Contents[].Key" --output text
foo/bar/.baz/a foo/bar/.baz/b foo/bar/.baz/c [...]
Opciones de la CLI de AWS:
--query "Contents[].Key"
=Consultar matriz de objetos de contenido y obtener todas las claves dentro--output text
=Salida como texto delimitado por tabulaciones ahora con comillas
Anexo basado en el comentario de Guangyang Li :
AWS CLI puro con nueva línea:
$ aws s3api list-objects --bucket "bucket" --prefix "foo/" --query "Contents[].{Key: Key}" --output text
foo/bar/.baz/a
foo/bar/.baz/b
foo/bar/.baz/c
[...]
No puedes hacer esto solo con el aws
comando, pero puede canalizarlo fácilmente a otro comando para eliminar la parte que no desea. También debe eliminar el --human-readable
marca para que sea más fácil trabajar con la salida, y el --summarize
marcar para eliminar los datos de resumen al final.
Prueba esto:
aws s3 ls s3://mybucket --recursive | awk '{print $4}'
Editar:para tener en cuenta los espacios en los nombres de archivo:
aws s3 ls s3://mybucket --recursive | awk '{$1=$2=$3=""; print $0}' | sed 's/^[ \t]*//'
Forma sencilla
aws s3 ls s3://mybucket --recursive --human-readable --summarize|cut -c 29-
Un filtro simple sería:
aws s3 ls s3://mybucket --recursive | perl -pe 's/^(?:\S+\s+){3}//'
Esto eliminará la fecha, la hora y el tamaño. Dejó solo la ruta completa del archivo. También funciona sin el recurso recursivo y también debería funcionar con nombres de archivo que contengan espacios.