Usa s3api con jq (AWS docu aws s3api list-objects):
Questa modalità è sempre ricorsiva.
$ aws s3api list-objects --bucket "bucket" | jq -r '.Contents[].Key'
a.txt
foo.zip
foo/bar/.baz/a
[...]
Puoi filtrare le sottodirectory aggiungendo un prefisso (qui foo
rubrica). Il prefisso non deve iniziare 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 Opzioni:
-r
=Raw Mode, senza virgolette nell'output.Contents[]
=OttieniContents
Contenuto dell'array di oggetti.Key
=Ottieni ogni campo chiave (non produce un array JSON valido, ma siamo in modalità raw, quindi non ci interessa)
Appendice :
Puoi utilizzare AWS CLI puro, ma i valori saranno separati da \x09
=Scheda orizzontale (AWS:Controllo dell'output dei comandi dall'AWS CLI - Formato di output del testo)
$ 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 [...]
Opzioni AWS CLI:
--query "Contents[].Key"
=Interroga Contents Object Array e ottieni ogni chiave all'interno--output text
=Output come testo delimitato da tabulazioni con ora virgolette
Appendice basata sul commento di Guangyang Li :
Pure AWS CLI con New Line:
$ 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
[...]
Non puoi farlo solo con il aws
comando, ma puoi facilmente reindirizzarlo a un altro comando per eliminare la parte che non desideri. Devi anche rimuovere --human-readable
flag per rendere l'output più facile da usare e il --summarize
flag per rimuovere i dati di riepilogo alla fine.
Prova questo:
aws s3 ls s3://mybucket --recursive | awk '{print $4}'
Modifica:per prendere in considerazione gli spazi nei nomi dei file:
aws s3 ls s3://mybucket --recursive | awk '{$1=$2=$3=""; print $0}' | sed 's/^[ \t]*//'
Modo semplice
aws s3 ls s3://mybucket --recursive --human-readable --summarize|cut -c 29-
Un semplice filtro sarebbe:
aws s3 ls s3://mybucket --recursive | perl -pe 's/^(?:\S+\s+){3}//'
Questo rimuoverà la data, l'ora e le dimensioni. Lasciato solo il percorso completo del file. Funziona anche senza il ricorsivo e dovrebbe funzionare anche con nomi di file contenenti spazi.