Dossiers

Restez organisé à l'aide des collections Enregistrez et classez les contenus selon vos préférences.

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.

/storage/images/folders.svg

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 :

  1. Dans la console Google Cloud, accédez à la page du Navigateur Cloud Storage.

    Accéder à la page "Buckets"

  2. Accédez au bucket.

  3. 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 :

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

  2. 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 que file1 et file2 :

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

    Par conséquent, gsutil crée les objets gs://your-bucket/abc/your-dir/file1 et gs://your-bucket/abc/your-dir/file2.

  3. 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éfixe abc, pour déterminer si le bucket contient des objets dont le chemin d'accès commence par gs://your-bucket/abc/. Si c'est le cas, gsutil traite gs://your-bucket/abc comme un nom de dossier, et la commande ci-dessus crée l'objet gs://your-bucket/abc/your-file. Sinon, gsutil crée l'objet gs://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 :

  1. Ajoutez une barre oblique à la fin de l'URL de destination pour que gsutil la traite toujours comme un dossier.

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

  3. 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 que gs://your-bucket/new est un dossier cohérent. Une fois que vous disposez d'au moins un de vos objets sous gs://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ète gs://my-bucket/folder/ comme un objet différent de gs://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