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 sichContents
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.