Ich habe Probleme beim Herunterladen mehrerer Dateien von AWS S3-Buckets auf meinen lokalen Computer.
Ich habe alle Dateinamen, die ich herunterladen möchte, und ich möchte keine anderen. Wie kann ich das machen ? Gibt es irgendeine Art von Schleife in aws-cli, die ich etwas wiederholen kann?
Es gibt einige Hundert Dateien, die ich herunterladen muss, so dass es nicht möglich ist, einen einzigen Befehl zu verwenden, der alle Dateinamen als Argumente verwendet.
Es gibt ein Bash-Skript, das alle Dateinamen aus einer Datei filename.txt
lesen kann.
#!/bin/bash
set -e
while read line
do
aws s3 cp s3://bucket-name/$line dest-path/
done <filename.txt
Man kann auch die Option --recursive
verwenden, wie im Befehl documentation for cp
beschrieben. Es werden alle Objekte unter einem angegebenen Präfix rekursiv kopiert. Z.B.:
aws s3 cp s3://folder1/folder2/folder3 . --recursive
greift alle Dateien unter Ordner1/Ordner2/Ordner3 und kopiert sie in das lokale Verzeichnis.
Möglicherweise möchten Sie "sync" anstelle von "cp" verwenden. Im Folgenden werden nur Dateien mit der Erweiterung ".txt" in Ihrem lokalen Ordner heruntergeladen/synchronisiert:
aws s3 sync --exclude="*" --include="*.txt" s3://mybucket/mysubbucket .
Mit doc können Sie auch include
- und exclude
-Filter mit s3 cp
verwenden. So kannst du so etwas machen:
aws s3 cp s3://bucket/folder/ . --recursive --exclude="*" --include="2017-12-20*"
Stellen Sie sicher, dass Sie die Reihenfolge der exclude
- und include
-Filter angeben, da dies die gesamte Bedeutung ändern kann.