GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo mostrar solo los archivos del comando aws s3 ls?

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[] =Obtener Contents 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.


Linux
  1. Cómo cambiar el nombre de los archivos en Linux

  2. Cómo excluir archivos de cierto tamaño de la copia en Linux

  3. ¿Cómo maneja Linux múltiples separadores de rutas consecutivas (/home////username///file)?

  4. ¿En qué sistemas es diferente //foo/bar de /foo/bar?

  5. Comando de Linux:¿Cómo 'buscar' solo archivos de texto?

Cómo extraer o descomprimir archivos tar.gz desde la línea de comandos de Linux

Cómo buscar archivos desde la Terminal en Linux

Cómo buscar archivos desde la línea de comandos de Linux

Cómo mostrar archivos gif en Ubuntu Terminal

Cómo mostrar dos archivos uno al lado del otro en Linux

Cómo ejecutar el comando SUDO en WinSCP para transferir archivos de Windows a Linux