GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie zeige ich nur Dateien aus dem Befehl aws s3 ls an?

Verwenden Sie die s3api mit jq (AWS-Dokumentation aws s3api list-objects):

Dieser Modus ist immer rekursiv.

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

Sie können Unterverzeichnisse filtern, indem Sie ein Präfix hinzufügen (hier foo Verzeichnis). Das Präfix darf nicht mit / beginnen .

$ 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 Optionen:

  • -r =Raw-Modus, keine Anführungszeichen in der Ausgabe
  • .Contents[] =Holen Sie sich Contents Inhalt des Objekt-Arrays
  • .Key =Jedes Schlüsselfeld abrufen (erzeugt kein gültiges JSON-Array, aber wir befinden uns im Rohmodus, also ist es uns egal)

Nachtrag :

Sie können die reine AWS CLI verwenden, aber die Werte werden durch \x09 getrennt =Horizontale Registerkarte (AWS:Steuern der Befehlsausgabe von der AWS CLI – Textausgabeformat)

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

AWS CLI-Optionen:

  • --query "Contents[].Key" =Contents Object Array abfragen und jeden Schlüssel darin holen
  • --output text =Ausgabe als tabulatorgetrennter Text mit jetzt Anführungszeichen

Nachtrag basierend auf dem Kommentar von Guangyang Li :

Reine AWS CLI mit 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
[...]

Mit aws geht das nicht Befehl, aber Sie können es einfach an einen anderen Befehl weiterleiten, um den Teil zu entfernen, den Sie nicht wollen. Sie müssen auch den --human-readable entfernen Flag, um die Ausgabe einfacher zu bearbeiten, und das --summarize Flag, um die zusammenfassenden Daten am Ende zu entfernen.

Versuchen Sie Folgendes:

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

Bearbeiten:um Leerzeichen in Dateinamen zu berücksichtigen:

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

Einfacher Weg

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

Ein einfacher Filter wäre:

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

Dadurch werden Datum, Uhrzeit und Größe entfernt. Links nur der vollständige Pfad der Datei. Es funktioniert auch ohne die Rekursion und es sollte auch mit Dateinamen funktionieren, die Leerzeichen enthalten.


Linux
  1. So benennen Sie Dateien unter Linux um

  2. So schließen Sie Dateien bestimmter Größe vom Kopieren in Linux aus

  3. Wie behandelt Linux mehrere aufeinanderfolgende Pfadtrennzeichen (/home////username///file)?

  4. Ist Rsync ~/foo Target/foo dasselbe wie Rsync ~/foo/Target/foo/?

  5. Wie finde ich heraus, aus welchem ​​Ordner ein Prozess läuft?

So extrahieren oder entpacken Sie tar.gz-Dateien von der Linux-Befehlszeile

So suchen Sie Dateien im Terminal unter Linux

So suchen Sie nach Dateien über die Linux-Befehlszeile

So zeigen Sie GIF-Dateien im Ubuntu-Terminal an

So zeigen Sie zwei Dateien nebeneinander in Linux an

So führen Sie den SUDO-Befehl in WinSCP aus, um Dateien von Windows nach Linux zu übertragen