このページでは、Cloud Storage のフォルダの概要について説明します。
フォルダの概要
マネージド フォルダを除き、Cloud Storage はフラットな名前空間で動作します。つまり、実際には Cloud Storage 内にフォルダは存在しません。バケット your-bucket
に folder1/file.txt
という名前のオブジェクトを作成すると、そのオブジェクトへのパスは your-bucket/folder1/file.txt
になりますが、folder1
という名前のフォルダはありません。代わりに、文字列 folder1
がオブジェクト名の一部になります。
ただし、Google Cloud コンソールと Cloud Storage CLI では、ファイルツリーが次のような階層構造で表示されます。
Google Cloud コンソールでは、ローカルのファイル ブラウザと同じようにフォルダが表示されます。
Cloud Storage CLI は、さまざまなルールを使用して一般的なコマンドライン ディレクトリをシミュレートします。
ツール
以下のタブをクリックすると、各ツールでのフォルダの処理方法を確認できます。
コンソール
Google Cloud コンソールでは、バケット内に空のフォルダを作成するか、既存のフォルダをアップロードできます。
既存のフォルダをアップロードすると、そのフォルダ内のすべてのオブジェクトのパスにフォルダ名が含まれます。サブフォルダとそこにあるオブジェクトもアップロードに含まれます。
フォルダを作成するには:
- Google Cloud コンソールで、Cloud Storage の [バケット] ページに移動します。
バケットに移動します。
[フォルダを作成] をクリックして空のフォルダを新規に作成するか、[フォルダをアップロード] をクリックして既存のフォルダをアップロードします。
コマンドライン
疑似的な階層型ファイルツリーを実現するため、gcloud storage
および gsutil
コマンドは次のルールを適用して、コマンド内の宛先 URL をオブジェクト名として扱うか、フォルダとして扱うかを決定します。
宛先 URL が
/
文字で終わる場合、CLI コマンドは宛先 URL をフォルダとして扱います。たとえば、次のコマンドを実行するとします。ここで、your-file
はファイルの名前です。gcloud storage cp your-file gs://your-bucket/abc/
このコマンドの結果として、Cloud Storage はバケット
your-bucket
にabc/your-file
という名前のオブジェクトを作成します。複数のソースファイルを宛先 URL にコピーした場合、CLI では宛先 URL がフォルダとして扱われます。たとえば、次のコマンドを実行するとします。ここで、
your-dir
はfile1
やfile2
などのファイルを含むフォルダです。gcloud storage cp your-dir gs://your-bucket/abc --recursive
このコマンドの結果として、Cloud Storage はバケット
your-bucket
にオブジェクトabc/your-dir/file1
とabc/your-dir/file2
を作成します。上記のいずれのルールも当てはまらない場合、CLI はバケット内のオブジェクトを確認して、宛先 URL がオブジェクト名かフォルダかを判断します。たとえば、次のコマンドを実行するとします。ここで、
your-file
はファイルの名前です。gcloud storage cp your-file gs://your-bucket/abc
CLI は、区切り文字に
/
、接頭辞にabc
を指定して、your-bucket
に対するオブジェクト一覧表示リクエストを行い、パスがabc/
で始まるオブジェクトがyour-bucket
にあるかどうかを判断します。その場合、CLI ではabc/
がフォルダ名として扱われ、上記のコマンドによりバケットyour-bucket
にオブジェクトabc/your-file
が作成されます。それ以外の場合、CLI ではオブジェクトabc
がyour-bucket
に作成されます。
このルールベースのアプローチは、フォルダの存在を示すために 0 バイトのオブジェクトを作成する多くのツールの仕組みとは異なります。Cloud Storage CLI では、0 バイト オブジェクトの名前の末尾に _$folder$
を追加する規則など、これらのツールで使用されるいくつかの規則が理解されていますが、CLI では、UNIX コマンドの一貫した命名動作を実装するために、このようなマーカー オブジェクトは必要ありません。
再試行と命名
Cloud Storage CLI が中断されたリクエストを再試行すると、最初の試行ではファイルのサブセットがコピーされ、その後の試行では既存の宛先フォルダが検出され、オブジェクトの名前が正しく付けられないという問題が発生する可能性があります。
たとえば、次のコマンドを実行するとします。ここで、your-dir/
には dir1
、dir2
というサブフォルダが存在し、両サブフォルダにはファイル abc
が含まれています。
gcloud storage cp ./your-dir gs://your-bucket/new --recursive
パス gs://your-bucket/new
がまだ存在しない場合、CLI では最初の成功時に次のオブジェクトが作成されます。
new/dir1/abc new/dir2/abc
ただし、同じコマンドが次回成功すると、CLI では次のオブジェクトが作成されます。
new/your-dir/dir1/abc new/your-dir/dir2/abc
すべての試行で CLI が一貫して動作するように、次のことを試してください。
宛先 URL の末尾にスラッシュを追加すると、CLI では常にそのパスがフォルダとして扱われます。
gcloud storage rsync
またはgsutil rsync
を使用します。rsync
は Unix cp で定義されるフォルダの命名規則を使用しません。宛先サブフォルダが存在するかどうかにかかわらず、一貫した命名を行います。
名前の構成の詳細については、cp
を使用した名前の構成をご覧ください。
その他の情報
Cloud Storage CLI を使用して空のフォルダをシミュレートするために、ゼロバイトのオブジェクトを作成することはできません。
/
はオブジェクト名の中の 1 文字にすぎない場合もあるため、CLI はgs://my-bucket/folder/
とgs://my-bucket//folder
は異なるものと解釈します。スクリプト内でサブパスを組み合わせてファイルパスを作成する場合には注意してください。
REST API
JSON API
JSON API にフォルダは存在しません。オブジェクト リストを絞り込むには、prefix
と delimiter
クエリ パラメータを使用します。
たとえば、接頭辞 folder/subfolder/
を使用してバケット my-bucket
内のすべてのオブジェクトを一覧表示するには、次の URL を使用してオブジェクトの一覧表示リクエストを行います。
"https://storage.googleapis.com/storage/v1/b/my-bucket/o?prefix=folder/subfolder/"
XML API
XML API にフォルダは存在しませんが、prefix
と delimiter
クエリ パラメータを使用すると、オブジェクト リストを絞り込むことができます。
たとえば、接頭辞 folder/subfolder/
を使用してバケット my-bucket
内のすべてのオブジェクトを一覧表示するには、次の URL を使用してオブジェクトの一覧表示リクエストを行います。
"https://storage.googleapis.com/my-bucket?prefix=folder/subfolder/"
次のステップ
Cloud Storage バケットにオブジェクトをアップロードする。
詳しくは、マネージド フォルダについてのページをご覧ください。