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.
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.
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:
Wenn die Ziel-URL mit einem
/
-Zeichen endet, behandeln Befehlszeilenbefehle die Ziel-URL als Ordner. Betrachten Sie beispielsweise den folgenden Befehl, wobeiyour-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 Bucketyour-bucket
.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 wiefile1
undfile2
ist:gcloud storage cp your-dir gs://your-bucket/abc --recursive
Aufgrund dieses Befehls erstellt Cloud Storage die Objekte
abc/your-dir/file1
undabc/your-dir/file2
im Bucketyour-bucket
.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 inyour-bucket
Objekte gibt, deren Pfad mitabc/
beginnt. Ist dies der Fall, behandelt die Befehlszeileabc/
als Ordnernamen und der obige Befehl erstellt das Objektabc/your-file
im Bucketyour-bucket
. Andernfalls erstellt die Befehlszeile das Objektabc
inyour-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:
Fügen Sie einen Schrägstrich am Ende der Ziel-URL hinzu, damit die Befehlszeilen sie immer als Ordner behandeln.
Verwenden Sie
gcloud storage rsync
odergsutil rsync
. Darsync
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 Befehlszeilengs://my-bucket/folder/
als ein anderes Objekt interpretieren alsgs://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/"