Simulierte Ordner

Diese Seite bietet einen Überblick über Ordner in Cloud Storage.

Übersicht über Ordner

Mit Ausnahme von verwalteten Ordnern arbeitet Cloud Storage 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 die Cloud Storage-Befehlszeilen bieten jedoch die Darstellung einer hierarchischen Dateistruktur:

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

  • Cloud Storage-Befehlszeilen simulieren das typische Befehlszeilenverzeichnis unter Verwendung verschiedener Regeln.

/storage/images/folders.svg

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:

  1. Wechseln Sie in der Cloud Console zur Seite Cloud Storage-Buckets.

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

Befehlszeile

Um die Illusion eines hierarchischen Dateibaums zu erreichen, wenden die Befehle gcloud storage und gsutil die folgenden Regeln an, um zu bestimmen, ob die Ziel-URL in einem Befehl als Objektname oder Ordner behandelt werden soll:

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

    gcloud storage cp your-file gs://your-bucket/abc/

    Als Ergebnis dieses Befehls erstellt Cloud Storage ein Objekt namens abc/your-file im Bucket your-bucket.

  2. Wenn Sie mehrere Quelldateien in eine Ziel-URL kopieren, behandeln die Befehlszeilen die Ziel-URL als Ordner. Betrachten Sie beispielsweise den folgenden Befehl, wobei your-dir ein Ordner mit Dateien wie file1 und file2 ist:

    gcloud storage cp your-dir gs://your-bucket/abc --recursive

    Aufgrund dieses Befehls erstellt Cloud Storage die Objekte abc/your-dir/file1 und abc/your-dir/file2 im Bucket your-bucket.

  3. Wenn keine der oben genannten Regeln zutrifft, prüfen die Befehlszeilen 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:

    gcloud storage cp your-file gs://your-bucket/abc

    Die Befehlszeile stellt eine Anfrage zur Auflistung von Objekten für your-bucket unter Verwendung des Trennzeichens /und des Präfixes=abc, um festzustellen, ob es in your-bucket Objekte gibt, deren Pfad mit abc/ beginnt. Ist dies der Fall, behandelt die Befehlszeile abc/ als Ordnernamen und der obige Befehl erstellt das Objekt abc/your-file im Bucket your-bucket. Andernfalls erstellt die Befehlszeile das Objekt abc in your-bucket.

Dieser regelbasierte Ansatz unterscheidet sich von der Funktionsweise vieler Tools, die 0-Byte-Objekte erstellen, um das Vorhandensein von Ordnern zu markieren. Die Cloud Storage-Befehlszeilen verstehen mehrere Konventionen, die von solchen Tools verwendet werden, z. B. die Konvention, dass _$folder$ am Ende des Namens des 0-Byte-Objekts hinzugefügt wird. Die Befehlszeilen benötigen jedoch keine solchen Markierungsobjekte, um ein mit UNIX-Befehlen übereinstimmendes Namensgebungsverhalten zu implementieren.

Wiederholungsversuche und Benennung

Wenn eine Cloud Storage-Befehlszeile eine unterbrochene Anfrage wiederholt, tritt möglicherweise ein Problem auf, bei dem beim ersten Versuch eine Teilmenge von Dateien kopiert wird und bei den nachfolgenden Versuchen ein bereits vorhandener Zielordner gefunden wird, was dazu führt, dass 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:

gcloud storage cp ./your-dir gs://your-bucket/new --recursive

Wenn der Pfad gs://your-bucket/new noch nicht vorhanden ist, erstellen die Befehlszeilen die folgenden Objekte beim ersten erfolgreichen Versuch:

new/dir1/abc
new/dir2/abc

Beim nächsten erfolgreichen Versuch desselben Befehls erstellen die Befehlszeilen jedoch die folgenden Objekte:

new/your-dir/dir1/abc
new/your-dir/dir2/abc

Damit die Befehlszeilen bei jedem Versuch konsistent funktionieren, versuchen Sie Folgendes:

  1. Fügen Sie einen Schrägstrich am Ende der Ziel-URL hinzu, damit die Befehlszeilen sie immer als Ordner behandeln.

  2. Verwenden Sie gcloud storage rsync oder 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.

Weitere Informationen zum Erstellen von Namen finden Sie unter Namenserstellung mit cp.

Zusätzliche Hinweise

  • Sie können kein Null-Byte-Objekt erstellen, um einen leeren Ordner mit Cloud Storage-Befehlszeilen zu imitieren.

  • Wenn Sie Scripts verwenden, um Dateipfade durch Kombination von Unterpfaden zu erstellen, beachten Sie, dass / nur ein Zeichen ist, das zufällig im Namen des Objekts vorkommt, und die Befehlszeilen gs://my-bucket/folder/ als ein anderes Objekt interpretieren als gs://my-bucket//folder.

REST APIs

JSON API

Ordner sind in der JSON API nicht vorhanden. Wenn Sie die Liste der Objekte eingrenzen möchten, verwenden Sie die Abfrageparameter prefix und delimiter.

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/"

Nächste Schritte