GNU/Linux >> Znalost Linux >  >> Linux

Jak zobrazit pouze soubory z příkazu aws s3 ls?

Použijte s3api s jq (AWS docu aws s3api seznam-objektů):

Tento režim je vždy rekurzivní.

$ aws s3api list-objects --bucket "bucket" | jq -r '.Contents[].Key'
a.txt
foo.zip
foo/bar/.baz/a
[...]

Podadresáře můžete filtrovat přidáním předpony (zde foo adresář). Předpona nesmí začínat / .

$ aws s3api list-objects --bucket "bucket" --prefix "foo/" | jq -r '.Contents[].Key'
foo/bar/.baz/a
foo/bar/.baz/b
foo/bar/.baz/c
[...]

Možnosti jq:

  • -r =Raw Mode, bez uvozovek na výstupu
  • .Contents[] =Získejte Contents Obsah pole objektů
  • .Key =Získejte každé klíčové pole (neprodukuje platné pole JSON, ale jsme v nezpracovaném režimu, takže nás to nezajímá)

Dodatek :

Můžete použít čistě AWS CLI, ale hodnoty budou odděleny \x09 =Horizontální karta (AWS:Řízení výstupu příkazů z AWS CLI – Textový výstupní formát)

$ 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   [...]

Možnosti AWS CLI:

  • --query "Contents[].Key" =Dotaz na obsah pole objektů a získejte každý klíč dovnitř
  • --output text =Výstup jako text oddělený tabulátory s nyní uvozovkami

Dodatek na základě komentáře Guangyang Li :

Čistý AWS CLI s novou řadou:

$ 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
[...]

Nemůžete to udělat pouze s aws příkaz, ale můžete jej snadno převést na jiný příkaz a odstranit část, kterou nechcete. Musíte také odstranit --human-readable příznak pro snazší práci s výstupem a --summarize příznak k odstranění souhrnných dat na konci.

Zkuste toto:

aws s3 ls s3://mybucket --recursive | awk '{print $4}'

Edit:pro zohlednění mezer v názvech souborů:

aws s3 ls s3://mybucket --recursive | awk '{$1=$2=$3=""; print $0}' | sed 's/^[ \t]*//'

Jednoduchý způsob

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

Jednoduchý filtr by byl:

aws s3 ls s3://mybucket --recursive | perl -pe 's/^(?:\S+\s+){3}//'

Tím se odstraní datum, čas a velikost. Ponechejte pouze úplnou cestu k souboru. Funguje také bez rekurzivního a mělo by fungovat i se souborem obsahujícím mezery.


Linux
  1. Jak přejmenovat soubory v Linuxu

  2. Jak vyloučit soubory určité velikosti z kopírování v Linuxu

  3. Jak Linux zpracovává více po sobě jdoucích oddělovačů cest (/home////username///soubor)?

  1. Na jakých systémech se //foo/bar liší od /foo/bar?

  2. Spusťte soubory / adresáře pomocí Gnome z příkazového řádku

  3. Jak získat pouze jména z příkazu find bez cesty

  1. Je Rsync ~/foo Target/foo stejný jako Rsync ~/foo/ Target/foo/?

  2. Příkaz Linux:Jak „najít“ pouze textové soubory?

  3. Jak používat CMAKE_INSTALL_PREFIX