risposta-alla-domanda-sullo-sviluppo-web-bd.com

Come visualizzare solo i file dal comando aws s3 ls?

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?

27
Borealis

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]*//'
42
Mark B

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.

7
Celogeek San

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.

2

Modo semplice

aws s3 ls s3://mybucket --recursive --human-readable --summarize|cut -c 29-
2
Tech Support

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)
1
notes-jj

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.

0
skipper21