Zum Inhalt springen

s5cmd CLI Object Storage Client einrichten

1.Laden Sie das neueste Release für Ihre Plattform aus dem GitHub-Repository herunter.

Entpacken Sie das Archiv. Verschieben Sie die ausführbare Datei nach /usr/local/bin.

Installieren Sie das -deb-Paket mit dpkg:

Terminal-Fenster
dpkg -i s5cmd_2.3.0_linux_amd64.deb

Installation mit Homebrew:

Terminal-Fenster
brew install peak/tap/s5cmd

Entpacken Sie das Archiv. Platzieren Sie die .exe-Datei in einem Verzeichnis in Ihrem Systempfad.

Terminal-Fenster
export S3_ENDPOINT_URL="https://object.storage.eu01.onstackit.cloud" export AWS_ACCESS_KEY_ID="xxxxxxxxxxxx" export AWS_SECRET_ACCESS_KEY="yyyyyyyyyyyyyyyyyyyyyy" export AWS_REGION="eu01"
Terminal-Fenster
setx S3_ENDPOINT_URL "https://object.storage.eu01.onstackit.cloud" setx AWS_ACCESS_KEY_ID "xxxxxxxxxxxx" setx AWS_SECRET_ACCESS_KEY "yyyyyyyyyyyyyyyyyyyyyy" setx AWS_REGION "eu01"
Terminal-Fenster
s5cmd ls
Terminal-Fenster
s5cmd ls s3://bucket
Terminal-Fenster
s5cmd head s3://bucket/object.gz

Ein einzelnes STACKIT Object Storage-Objekt herunterladen

Abschnitt betitelt „Ein einzelnes STACKIT Object Storage-Objekt herunterladen“
Terminal-Fenster
s5cmd cp s3://bucket/object.gz.

Angenommen, wir haben die folgenden Objekte:

s3://bucket/logs/2020/03/18/file1.gz s3://bucket/logs/2020/03/19/file2.gz s3://bucket/logs/2020/03/19/originals/file3.gz
Terminal-Fenster
s5cmd cp 's3://bucket/logs/2020/03/*' logs/

s5cmd gleicht die angegebenen Platzhalter und Argumente ab, indem es eine effiziente Suche nach den angegebenen Präfixen durchführt. Alle übereinstimmenden Objekte werden parallel heruntergeladen.s5cmderstellt das Zielverzeichnis, falls es fehlt.

Der Inhalt des Verzeichnisses logs/ sieht dann wie folgt aus:

$ tree. └── logs ├── 18 │ └── file1.gz └── 19 ├── file2.gz └── originals └── file3.gz 4 directories, 3 files

ℹ️s5cmd behält standardmäßig die Quellverzeichnisstruktur bei. Wenn Sie die Quellverzeichnisstruktur flach halten möchten, verwenden Sie das--flattenflag.

Terminal-Fenster
s5cmd cp --flatten 's3://bucket/logs/2020/03/*' logs/

Der Inhalt des Verzeichnisses logs/ sieht dann wie folgt aus:

$ tree. └── logs ├── file1.gz ├── file2.gz └── file3.gz 1 directory, 3 files
Terminal-Fenster
s5cmd cp object.gz s3://bucket/
Terminal-Fenster
s5cmd cp directory/ s3://bucket/

Lädt alle Dateien im angegebenen Verzeichnis in den Object Storage hoch, wobei die Ordnerhierarchie der Quelle beibehalten wird.

Terminal-Fenster
s5cmd rm s3://bucket/logs/2020/03/18/file1.gz
Terminal-Fenster
s5cmd rm 's3://bucket/logs/2020/03/19/*'

Entfernt alle übereinstimmenden Objekte:

s3://bucket/logs/2020/03/19/file2.gz s3://bucket/logs/2020/03/19/originals/file3.gz

s5cmd nutzt die S3-Delete-Batch-API. Wenn bis zu 1000 Objekte übereinstimmen, werden diese in einer einzigen Anfrage gelöscht. Es ist jedoch zu beachten, dass Befehle wie

Terminal-Fenster
s5cmd runs3://bucket-foo/object s3://bucket-bar/object

von s5cmd nicht unterstützt werden und zu einem Fehler führen (da es sich um zwei verschiedene Buckets handelt), da dies dem Vorteil von Batch-Löschanfragen widerspricht. Bei Bedarf kann man für diesen Fall den Modus s5cmd run verwenden, d. h.

Terminal-Fenster
$ s5cmd run rm s3://bucket-foo/object rm s3://bucket-bar/object

Objekte von einem Object Storage in einen anderen kopieren

Abschnitt betitelt „Objekte von einem Object Storage in einen anderen kopieren“

s5cmd nterstützt auch das Kopieren von Objekten auf der Serverseite.

Terminal-Fenster
s5cmd cp 's3://bucket/logs/2020/*' s3://bucket/logs/backup/

Kopiert alle übereinstimmenden Objekte in das angegebene Präfix unter Berücksichtigung der Quellordnerhierarchie.

⚠️Das Kopieren von Objekten (von einem Object Storage in einen anderen Object Storage), die größer als 5 GB sind, wird noch nicht unterstützt.

Das leistungsstärkste Feature von s5cmd ist die Befehlsdatei. Tausende von S3- und Dateisystembefehlen werden in einer Datei deklariert (oder einfach von einem anderen Prozess per Pipe übergeben) und von mehreren parallelen Workern ausgeführt. Da nur ein Programm gestartet wird, werden tausende unnötige Fork-Exec-Aufrufe vermieden. Auf diese Weise können S3-Ausführungszeiten von einigen tausend Operationen pro Sekunde erreicht werden.

Terminal-Fenster
s5cmd run commands.txt

Der Inhalt von commands.txt könnte wie folgt aussehen:

cp 's3://bucket/2020/03/*' logs/2020/03/ # line comments are supported rm s3://bucket/2020/03/19/file2.gz # empty lines are OK too like above # rename an S3 object mv s3://bucket/2020/03/18/file1.gz s3://bucket/2020/03/18/original/file.gz

numworkers ist eine globale Option, die die Größe des globalen Worker-Pools festlegt. Der Standardwert für numworkers ist 256.

Befehle wie cp, select und run, die von Parallelität profitieren können, nutzen diesen Worker-Pool zur Ausführung von Aufgaben. Eine Aufgabe kann ein Upload, ein Download oder ein beliebiger Befehl in einer run-Datei sein.

Wenn Sie beispielsweise 100 Dateien in einen S3-Bucket hochladen und —numworkers auf 10 eingestellt ist, begrenzt s5cmd die Anzahl der gleichzeitig hochgeladenen Dateien auf 10.

Terminal-Fenster
s5cmd --numworkers 10 cp '/Users/foo/bar/*' s3://mybucket/foo/bar/

concurrency ist eine Option für den Befehl cp. Sie legt die Anzahl der Teile fest, die für eine einzelne Datei parallel hoch- oder heruntergeladen werden. Der Standardwert für concurrency ist 5.

Die Optionen numworkers und concurrency können zusammen verwendet werden:

Terminal-Fenster
s5cmd --numworkers 10 cp --concurrency 10 '/Users/foo/bar/*' s3://mybucket/foo/bar/

Wenn Sie nur wenige, große Dateien zum Herunterladen haben, hat die Einstellung von —numworkers auf einen sehr hohen Wert keinen Einfluss auf die Download-Geschwindigkeit. In diesem Szenario kann die Einstellung von —concurrency auf einen höheren Wert eine bessere Auswirkung auf die Download-Geschwindigkeit haben.