Sto usando aws cli per elencare i file in un bucket s3 usando il seguente comando ( documentation ):
aws s3 ls s3://mybucket --recursive --human-readable --summarize
Questo comando mi dà il seguente risultato:
2013-09-02 21:37:53 10 Bytes a.txt
2013-09-02 21:37:53 2.9 MiB foo.Zip
2013-09-02 21:32:57 23 Bytes foo/bar/.baz/a
2013-09-02 21:32:58 41 Bytes foo/bar/.baz/b
2013-09-02 21:32:57 281 Bytes foo/bar/.baz/c
2013-09-02 21:32:57 73 Bytes foo/bar/.baz/d
2013-09-02 21:32:57 452 Bytes foo/bar/.baz/e
2013-09-02 21:32:57 896 Bytes foo/bar/.baz/hooks/bar
2013-09-02 21:32:57 189 Bytes foo/bar/.baz/hooks/foo
2013-09-02 21:32:57 398 Bytes z.txt
Total Objects: 10
Total Size: 2.9 MiB
Tuttavia, questo è il mio output desiderato:
a.txt
foo.Zip
foo/bar/.baz/a
foo/bar/.baz/b
foo/bar/.baz/c
foo/bar/.baz/d
foo/bar/.baz/e
foo/bar/.baz/hooks/bar
foo/bar/.baz/hooks/foo
z.txt
Come posso omettere data, ora e dimensione del file per mostrare solo l'elenco dei file?
Non puoi farlo solo con il comando aws
, ma puoi facilmente collegarlo a un altro comando per rimuovere la porzione che non vuoi. È inoltre necessario rimuovere il flag --human-readable
per ottenere un output più facile da utilizzare e il flag --summarize
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]*//'
Un semplice filtro potrebbe essere:
aws s3 ls s3://mybucket --recursive | Perl -pe 's/^(?:\S+\s+){3}//'
Questo rimuoverà la data, l'ora e le dimensioni. Ha lasciato solo il percorso completo del file. Funziona anche senza ricorsivo e dovrebbe funzionare anche con i nomi dei file che contengono spazi.
Solo per i nomi file , trovo il modo più semplice per essere:
aws s3 ls s3://path/to/bucket/ | cut -d " " -f 4
Questo taglierà l'output restituito agli spazi (cut -d " "
) e restituirà la quarta colonna (-f 4
), che è la lista dei nomi dei file.
Modo semplice
aws s3 ls s3://mybucket --recursive --human-readable --summarize|cut -c 29-
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
[...]
È possibile filtrare le sottodirectory aggiungendo un prefisso (qui la directory foo
). 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
[...]
opzioni jq:
-r
= Modalità raw, nessuna virgoletta in uscita.Contents[]
= Ottieni Contents
Contenuto della matrice di oggetti.Key
= Ottieni ogni campo chiave (non produce un array JSON valido, ma siamo in modalità raw, quindi non ci interessa)Il comando semplice sarebbe
aws s3 ls s3://mybucket --recursive --human-readable --summarize |cut -d ' ' -f 8
Se è necessario il timestamp, è sufficiente aggiornare i valori del campo di comando.