Ordner

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 mit dem Namen folder1/file.txt im Bucket your-bucket erstellen, lautet der Pfad zum Objekt your-bucket/folder1/file.txt. Es gibt keinen folder1-Ordner, sondern nur ein einzelnes Objekt, in dessen Namen folder1 enthalten ist.

Die Cloud Console und gsutil bieten jedoch die Darstellung einer hierarchischen Dateistruktur:

  • Die Cloud Console erstellt eine visuelle Darstellung von Ordnern, die einem lokalen Dateibrowser ähneln.

  • gsutil simuliert das typische Befehlszeilenverzeichnis unter Verwendung verschiedener Regeln.

/storage/images/folders.svg

Wenn Sie mit der Cloud Console einen leeren Ordner erstellen, erstellt Cloud Storage ein Null-Byte-Objekt als Platzhalter. Wenn Sie beispielsweise einen Ordner mit dem Namen folder in einem Bucket mit dem Namen my-bucket erstellen, wird ein Null-Byte-Objekt mit dem Namen gs://my-bucket/folder/ erstellt. Sie finden dieses Objekt, wenn Sie gsutil ls ausführen.

Tools

Klicken Sie auf die Tabs unten, um zu sehen, wie die einzelnen Tools die Ordner handhaben.

Console

In der 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:

  1. Wechseln Sie in der Cloud Console zum Cloud Storage-Browser.

    Browser aufrufen

  2. Rufen Sie den Bucket auf.

  3. Klicken Sie auf Ordner erstellen, um einen leeren neuen Ordner zu erstellen, oder auf Ordner hochladen, um einen vorhandenen Ordner hochzuladen.

gsutil

Um den Eindruck einer hierarchischen Dateistruktur zu erhalten, wendet gsutil die folgenden Regeln an, um zu bestimmen, ob die Ziel-URL in einem Befehl als Objektname oder als Ordner behandelt werden soll:

  1. Wenn die Ziel-URL mit einem /-Zeichen endet, behandelt gsutil die Ziel-URL als Ordner. Betrachten Sie zum Beispiel den folgenden Befehl, wobei your-file der Name einer Datei ist:

    gsutil cp your-file gs://your-bucket/abc/

    Daraufhin erstellt gsutil ein Objekt mit dem Namen gs://your-bucket/abc/your-file.

  2. 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 wie file1 und file2 ist:

    gsutil cp -r your-dir gs://your-bucket/abc

    Daraufhin erstellt gsutil die Objekte gs://your-bucket/abc/your-dir/file1 und gs://your-bucket/abc/your-dir/file2.

  3. Wenn keine der obigen Regeln zutrifft, überprü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 unter Verwendung des Trennzeichens / und Präfix=abc, um zu ermitteln, ob sich im Bucket Objekte befinden, deren Pfad mit gs://your-bucket/abc/ beginnt. Ist dies der Fall, behandelt gsutil gs://your-bucket/abc als Ordnernamen. Der obige Befehl erstellt das Objekt gs://your-bucket/abc/your-file. Andernfalls erstellt gsutil das Objekt gs://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:

  1. Fügen Sie einen Schrägstrich am Ende der Ziel-URL hinzu, damit gsutil ihn immer als Ordner behandelt.

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

  3. 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 beim Ausführen des obigen Befehls gsutil cp -r gs://your-bucket/new konsistent als Ordner behandelt. Sobald mindestens eines Ihrer Objekte unter gs://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 als gs://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/"