Cette page traite des dossiers dans Cloud Storage et de leurs différences dans les outils Cloud Storage.
Présentation
Cloud Storage fonctionne avec un espace de noms plat, ce qui signifie que les dossiers n'existent pas réellement dans Cloud Storage. Si vous créez un objet nommé folder1/file.txt
dans le bucket your-bucket
, le chemin d'accès à l'objet est your-bucket/folder1/file.txt
, mais il n'existe aucun dossier nommé folder1
. Au lieu de cela, la chaîne folder1
fait partie du nom de l'objet.
Toutefois, la console Google Cloud et gsutil fournissent l'illusion d'une arborescence de fichiers hiérarchique :
La console Google Cloud crée une représentation visuelle des dossiers qui ressemblent à l'explorateur de fichiers local.
gsutil simule l'expérience de répertoire de ligne de commande classique à l'aide de diverses règles.
Outils
Cliquez sur les onglets ci-dessous pour savoir comment chaque outil gère les dossiers.
Console
Dans la console Google Cloud, vous pouvez créer un dossier vide dans un bucket ou importer un dossier existant.
Lorsque vous importez un dossier existant, le nom du dossier devient une partie du chemin d'accès à tous les objets qu'il contient. Tous les sous-dossiers et les objets qu'ils contiennent sont également inclus dans l'importation.
Pour créer un dossier, procédez comme suit :
- Dans la console Google Cloud, accédez à la page du Navigateur Cloud Storage.
Accédez au bucket.
Cliquez sur Créer un dossier pour créer un dossier vide ou sur Importer un dossier pour importer un dossier existant.
gsutil
Pour illustrer l'arborescence de fichiers hiérarchique, gsutil applique les règles suivantes pour déterminer si l'URL de destination d'une commande doit être traitée comme un nom d'objet ou un dossier :
Si l'URL de destination se termine par le caractère
/
, gsutil traite l'URL de destination comme un dossier. Prenons l'exemple de la commande suivante, oùyour-file
est le nom d'un fichier :gsutil cp your-file gs://your-bucket/abc/
En conséquence, gsutil crée un objet nommé
gs://your-bucket/abc/your-file
.Si vous copiez plusieurs fichiers sources dans une URL de destination, gsutil traite l'URL de destination comme un dossier. Par exemple, considérons la commande suivante, où
your-dir
est un dossier contenant des fichiers tels quefile1
etfile2
:gsutil cp -r your-dir gs://your-bucket/abc
Par conséquent, gsutil crée les objets
gs://your-bucket/abc/your-dir/file1
etgs://your-bucket/abc/your-dir/file2
.Si aucune des règles ci-dessus ne s'applique, gsutil vérifie les objets du bucket pour déterminer si l'URL de destination est un nom d'objet ou un dossier. Prenons l'exemple de la commande suivante, où
your-file
est le nom d'un fichier :gsutil cp your-file gs://your-bucket/abc
gsutil envoie une requête de création de liste d'objets pour
your-bucket
, en utilisant le délimiteur/
et le préfixeabc
, pour déterminer si le bucket contient des objets dont le chemin d'accès commence pargs://your-bucket/abc/
. Si c'est le cas, gsutil traitegs://your-bucket/abc
comme un nom de dossier, et la commande ci-dessus crée l'objetgs://your-bucket/abc/your-file
. Sinon, gsutil crée l'objetgs://your-bucket/abc
.
L'approche basée sur des règles de gsutil diffère du fonctionnement de nombreux outils, qui créent des objets de 0 octet pour marquer l'existence de dossiers. gsutil comprend plusieurs conventions utilisées par ces outils, telles que la convention d'ajout de _$folder$
à la fin du nom de l'objet de 0 octet, mais gsutil ne nécessite pas de tels objets de repère pour mettre en œuvre un comportement de dénomination cohérent avec les commandes UNIX.
Nouvelles tentatives et dénomination
Si vous activez la relance automatique des tentatives via gsutil, vous risquez de rencontrer un problème dans lequel une première tentative ne copie qu'un sous-ensemble de fichiers et les tentatives suivantes rencontrent un dossier de destination déjà existant et nomment correctement vos objets.
Prenons l'exemple de la commande suivante, qui comporte des sous-dossiers sous your-dir/
, tels que dir1
et dir2
, et où les deux sous-dossiers contiennent le fichier abc
:
gsutil cp -r ./your-dir gs://your-bucket/new
Si l'objet gs://your-bucket/new
n'existe pas encore, gsutil crée les objets suivants à la première tentative réussie :
gs://your-bucket/new/dir1/abc gs://your-bucket/new/dir2/abc
Lors de la prochaine tentative réussie, gsutil crée les objets suivants :
gs://your-bucket/new/your-dir/dir1/abc gs://your-bucket/new/your-dir/dir2/abc
Pour que gsutil fonctionne de manière cohérente à chaque tentative, procédez comme suit :
Ajoutez une barre oblique à la fin de l'URL de destination pour que gsutil la traite toujours comme un dossier.
Utilisez
gsutil rsync
. Étant donné que rsync n'utilise pas les règles de dénomination des dossiers définies par cp d'Unix, la commande s'exécute de manière cohérente, que le sous-dossier de destination existe ou non.Si gsutil rsync ne fonctionne pas, créez un objet d'espace réservé pour établir que la destination est un dossier. Exemple :
gsutil cp some-file gs://your-bucket/new/placeholder
Si l'objet d'espace réservé est présent, l'exécution de la commande
gsutil cp -r
ci-dessus considère quegs://your-bucket/new
est un dossier cohérent. Une fois que vous disposez d'au moins un de vos objets sousgs://your-bucket/new
, vous pouvez supprimer l'objet d'espace réservé et poursuivre vos importations.
Pour en savoir plus sur la construction des noms, consultez gsutil help cp
.
Remarques supplémentaires
Vous ne pouvez pas créer un objet de zéro octet pour imiter un dossier vide à l'aide de gsutil.
Si vous utilisez des scripts pour créer des chemins de fichiers en combinant des sous-chemins, notez que comme
/
est simplement un caractère qui se trouve dans le nom de l'objet, gsutil interprètegs://my-bucket/folder/
comme un objet différent degs://my-bucket//folder
.
Remarques sur les tarifs
L'un des inconvénients de l'approche de dénomination gsutil est qu'elle nécessite une liste d'objets supplémentaire avant d'exécuter une commande cp
ou mv
, telle qu'une copie récursive d'un dossier dans le cloud. Toutefois, ces listes sont relativement peu coûteuses, car elles utilisent des paramètres de délimiteur et de préfixe pour limiter les données de résultat. gsutil n'envoie qu'une seule requête de création de liste d'objets par commande cp
ou mv
. Par conséquent, le coût de tous les objets transférés est amorti.
API REST
API JSON
Les dossiers n'existent pas dans l'API JSON, mais vous pouvez affiner laobjets que vous répertoriez à l'aide des paramètres de requête prefix
et delimiter
.
Par exemple, pour répertorier tous les objets du bucket my-bucket
avec le préfixe folder/subfolder/
, exécutez une requête de liste d'objets en utilisant cette URL :
"https://storage.googleapis.com/storage/v1/b/my-bucket/o?prefix=folder/subfolder/"
API XML
Les dossiers n'existent pas dans l'API XML, mais vous pouvez affiner les objets que vous répertoriez à l'aide des paramètres de requête prefix
et delimiter
.
Par exemple, pour répertorier tous les objets du bucket my-bucket
avec le préfixe folder/subfolder/
, exécutez une requête de liste d'objets en utilisant cette URL :
"https://storage.googleapis.com/my-bucket?prefix=folder/subfolder/"
Étape suivante
- Importez des objets dans un bucket Cloud Storage.