GNU/Linux >> Linux Esercitazione >  >> Linux

Come visualizzare solo i file dal comando aws s3 ls?

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


Linux
  1. In che modo Linux gestisce più separatori di percorsi consecutivi (/home////nomeutente///file)?

  2. Rsync ~/foo Target/foo è uguale a Rsync ~/foo/ Target/foo/?

  3. Come usare CMAKE_INSTALL_PREFIX

  4. Avvia file/directory utilizzando Gnome dalla riga di comando

  5. Come ottenere solo nomi dal comando find senza percorso

Come estrarre o decomprimere i file tar.gz dalla riga di comando di Linux

Come cercare file dal Terminale su Linux

Come cercare file dalla riga di comando di Linux

Come visualizzare i file gif in Ubuntu Terminal

Come visualizzare due file affiancati in Linux

Come eseguire il comando SUDO in WinSCP per trasferire file da Windows a Linux