Auf dieser Seite werden Ordner in Cloud Storage und ihre Unterschiede in den Cloud Storage-Tools beschrieben.
Übersicht
Cloud Storage arbeitet mit einem flachen Namespace, d. h., dass Ordner nicht in Cloud Storage vorhanden sind. Wenn Sie ein Objekt namens folder1/file.txt
im Bucket your-bucket
erstellen, lautet der Pfad zum Objekt your-bucket/folder1/file.txt
, aber es gibt keinen Ordner mit dem Namen folder1
. Stattdessen ist der String folder1
Teil des Objektnamens.
Die Google Cloud Console und gsutil bieten jedoch die Darstellung einer hierarchischen Dateistruktur:
Die Google Cloud Console erstellt eine visuelle Darstellung von Ordnern, die einem lokalen Dateibrowser ähneln.
gsutil simuliert das typische Befehlszeilenverzeichnis unter Verwendung verschiedener Regeln.
Tools
Klicken Sie auf die Tabs unten, um zu sehen, wie die einzelnen Tools die Ordner handhaben.
Console
In der Google Cloud Console können Sie einen leeren Ordner in einem Bucket erstellen oder einen vorhandenen Ordner hochladen.
Wenn Sie einen vorhandenen Ordner hochladen, wird der Name des Ordners Teil des Pfads für alle im Ordner enthaltenen Objekte. Alle Unterordner und die darin enthaltenen Objekte werden ebenfalls in den Upload einbezogen.
So erstellen Sie einen Ordner:
- Wechseln Sie in der Cloud Console zur Seite Cloud Storage-Buckets.
Rufen Sie den Bucket auf.
Klicken Sie auf Ordner erstellen, um einen leeren neuen Ordner zu erstellen, oder auf Ordner hochladen, um einen vorhandenen Ordner hochzuladen.
gsutil
Um die Illusion eines hierarchischen Dateibaums zu erreichen, wendet gsutil die folgenden Regeln an, um zu bestimmen, ob die Ziel-URL in einem Befehl als Objektname oder Ordner behandelt werden soll:
Wenn die Ziel-URL mit einem
/
-Zeichen endet, behandelt gsutil die Ziel-URL als Ordner. Betrachten Sie beispielsweise den folgenden Befehl, wobeiyour-file
der Name einer Datei ist:gsutil cp your-file gs://your-bucket/abc/
Dadurch erstellt gsutil ein Objekt mit dem Namen
gs://your-bucket/abc/your-file
.Wenn Sie mehrere Quelldateien in eine Ziel-URL kopieren, behandelt gsutil die Ziel-URL als Ordner. Betrachten Sie beispielsweise den folgenden Befehl, wobei
your-dir
ein Ordner mit Dateien wiefile1
undfile2
ist:gsutil cp -r your-dir gs://your-bucket/abc
Dadurch erstellt gsutil die Objekte
gs://your-bucket/abc/your-dir/file1
undgs://your-bucket/abc/your-dir/file2
.Wenn keine der oben genannten Regeln zutrifft, prüft gsutil die Objekte im Bucket, um festzustellen, ob die Ziel-URL ein Objektname oder ein Ordner ist. Betrachten Sie beispielsweise den folgenden Befehl, wobei
your-file
der Name einer Datei ist:gsutil cp your-file gs://your-bucket/abc
gsutil sendet eine Objektauflistungsanfrage für
your-bucket
mit dem Trennzeichen/
und mit Präfix=abc
, um zu bestimmen, ob sich im Bucket Objekte befinden, deren Pfad mitgs://your-bucket/abc/
beginnt. Ist dies der Fall, behandelt gsutilgs://your-bucket/abc
als Ordnernamen und der obige Befehl erstellt das Objektgs://your-bucket/abc/your-file
. Andernfalls erstellt gsutil das Objektgs://your-bucket/abc
.
Der regelbasierte Ansatz von gsutil unterscheidet sich von der Art, wie viele Tools funktionieren, die 0-Byte-Objekte erstellen, um das Vorhandensein von Ordnern zu kennzeichnen. gsutil versteht verschiedene Konventionen, die von solchen Tools verwendet werden, z. B. die Konvention, dem Ende des Namens des 0-Byte-Objekts _$folder$
hinzuzufügen, aber gsutil erfordert solche Markierungsobjekte nicht, um ein Benennungsverhalten zu implementieren, das UNIX-Befehlen entspricht.
Wiederholungsversuche und Benennung
Wenn Sie automatische Wiederholungsversuche über gsutil aktivieren, kann ein Problem auftreten, bei dem ein erster Versuch nur eine Teilmenge der Dateien kopiert und bei nachfolgenden Versuchen ein bereits vorhandener Zielordner auftritt und Ihre Objekte falsch benannt werden.
Betrachten Sie zum Beispiel den folgenden Befehl, bei dem sich unter your-dir/
Unterordner befinden, z. B. dir1
und dir2
, und beide Unterordner enthalten die Datei abc
:
gsutil cp -r ./your-dir gs://your-bucket/new
Wenn gs://your-bucket/new
noch nicht vorhanden ist, erstellt gsutil die folgenden Objekte beim ersten erfolgreichen Versuch:
gs://your-bucket/new/dir1/abc gs://your-bucket/new/dir2/abc
Beim nächsten erfolgreichen Versuch erstellt gsutil die folgenden Objekte:
gs://your-bucket/new/your-dir/dir1/abc gs://your-bucket/new/your-dir/dir2/abc
Damit gsutil bei jedem Versuch konsistent funktioniert, versuchen Sie Folgendes:
Fügen Sie einen Schrägstrich am Ende der Ziel-URL hinzu, damit gsutil sie immer als Ordner behandelt.
Verwenden Sie
gsutil rsync
. Da „rsync“ nicht die von Unix cp definierten Ordnerbenennungsregeln verwendet, ist die Funktionsweise konsistent, unabhängig davon, ob der Zielunterordner vorhanden ist oder nicht.Wenn „gsutil rsync“ nicht funktioniert, erstellen Sie ein Platzhalterobjekt, um festzulegen, dass das Ziel ein Ordner ist. Beispiel:
gsutil cp some-file gs://your-bucket/new/placeholder
Wenn das Platzhalterobjekt vorhanden ist, wird
gs://your-bucket/new
beim Ausführen des obigen Befehlsgsutil cp -r
konsistent als Ordner behandelt. Sobald mindestens eines Ihrer Objekte untergs://your-bucket/new
vorhanden ist, können Sie das Platzhalterobjekt löschen und Ihre Uploads fortsetzen.
Weitere Informationen zum Erstellen von Namen finden Sie unter gsutil help cp
.
Zusätzliche Hinweise
Sie können kein Null-Byte-Objekt erstellen, um einen leeren Ordner mit gsutil nachzuahmen.
Wenn Sie Skripts verwenden, um Dateipfade durch Kombination von Unterpfaden zu erstellen, beachten Sie, dass gsutil
gs://my-bucket/folder/
als ein anderes Zeichen interpretiert alsgs://my-bucket//folder
, da/
nur ein Zeichen im Namen des Objekts ist.
Kosten
Ein Nachteil des gsutil-Benennungsansatzes ist, dass eine zusätzliche Objektauflistung erforderlich ist, bevor ein cp
- oder mv
-Befehl ausgeführt wird, z. B. eine wiederkehrende Kopie eines Ordners in die Cloud. Diese Auflistungen sind jedoch relativ kostengünstig, da sie Trennzeichen- und Präfixparameter verwenden, um Ergebnisdaten einzuschränken. Außerdem verwendet gsutil nur eine Anfrage zur Objektauflistung pro cp
- oder mv
-Befehl und amortisiert somit die Kosten über alle übertragenen Objekte.
REST APIs
JSON API
Ordner sind in der JSON API nicht vorhanden, aber Sie können dieObjekte, die Sie auflisten mit demprefix
unddelimiter
Abfrageparameter auf Ihrem Mobilgerät.
Wenn Sie beispielsweise alle Objekte im Bucket my-bucket
mit dem Präfix folder/subfolder/
auflisten möchten, stellen Sie eine Anfrage zur Objektauflistung unter Verwendung der folgenden URL:
"https://storage.googleapis.com/storage/v1/b/my-bucket/o?prefix=folder/subfolder/"
XML API
Ordner sind in der XML API nicht vorhanden, aber Sie können die Liste der Objekte mithilfe von prefix
und delimiter
eingrenzen.
Wenn Sie beispielsweise alle Objekte im Bucket my-bucket
mit dem Präfix folder/subfolder/
auflisten möchten, stellen Sie eine Anfrage zur Objektauflistung unter Verwendung der folgenden URL:
"https://storage.googleapis.com/my-bucket?prefix=folder/subfolder/"