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