Como renomear, copiar e mover objetos

Nesta página, você aprenderá como renomear, copiar e mover objetos dentro do Cloud Storage e entre seus intervalos. Para uma visão geral dos objetos, leia os Termos-chave e consulte os Requisitos de nomeação de objetos.

Como renomear um objeto

Para renomear um objeto existente em um dos seus intervalos do Cloud Storage, faça o seguinte:

Console

  1. Abra o navegador do Cloud Storage no Console do Google Cloud.
    Abrir o navegador do Cloud Storage
  2. Procure o objeto que você quer renomear.

  3. Clique no menu de mais ações () associado ao objeto.

  4. Clique em Renomear.

  5. Na janela de sobreposição, insira um novo nome para o objeto.

  6. Clique em Renomear.

gsutil

Use o comando gsutil mv:

gsutil mv gs://[BUCKET_NAME]/[OLD_OBJECT_NAME] gs://[BUCKET_NAME]/[NEW_OBJECT_NAME]

Em que:

  • [BUCKET_NAME] é o nome do intervalo que contém o objeto que você quer renomear. Por exemplo, my-bucket.
  • [OLD_OBJECT_NAME] é o nome do objeto que você quer renomear. Por exemplo, pets/dog.png.
  • [NEW_OBJECT_NAME] é o novo nome que você quer dar ao seu objeto. Por exemplo, pets/shiba.png.

Se a operação for bem-sucedida, a resposta será parecida com esta:

Operation completed over 1 objects/58.8 KiB.

Amostras de código

C++

Para mais informações, consulte a documentação de referência da API do Cloud Storage para C++.

namespace gcs = google::cloud::storage;
using ::google::cloud::StatusOr;
[](gcs::Client client, std::string bucket_name, std::string old_object_name,
   std::string new_object_name) {
  StatusOr<gcs::ObjectMetadata> object_metadata =
      client.RewriteObjectBlocking(bucket_name, old_object_name, bucket_name,
                                   new_object_name);

  if (!object_metadata) {
    throw std::runtime_error(object_metadata.status().message());
  }

  google::cloud::Status status =
      client.DeleteObject(bucket_name, old_object_name);

  if (!status.ok()) {
    throw std::runtime_error(status.message());
  }

  std::cout << "Renamed " << old_object_name << " to " << new_object_name
            << " in bucket " << bucket_name << "\n";
}

C#

Para mais informações, consulte a documentação de referência da API do Cloud Storage para C#.

private void MoveObject(string bucketName, string sourceObjectName,
    string destObjectName)
{
    var storage = StorageClient.Create();
    storage.CopyObject(bucketName, sourceObjectName, bucketName,
        destObjectName);
    storage.DeleteObject(bucketName, sourceObjectName);
    Console.WriteLine($"Moved {sourceObjectName} to {destObjectName}.");
}

Go

Para mais informações, consulte a documentação de referência da API do Cloud Storage para Go.

dstName := object + "-rename"

src := client.Bucket(bucket).Object(object)
dst := client.Bucket(bucket).Object(dstName)

if _, err := dst.CopierFrom(src).Run(ctx); err != nil {
	return err
}
if err := src.Delete(ctx); err != nil {
	return err
}

Java

Para mais informações, consulte a documentação de referência da API do Cloud Storage para Java.

CopyWriter copyWriter = blob.copyTo(destBucket, destBlob);
Blob copiedBlob = copyWriter.getResult();
boolean deleted = blob.delete();

Node.js

Para mais informações, consulte a documentação de referência da API do Cloud Storage para Node.js.

// Imports the Google Cloud client library
const {Storage} = require('@google-cloud/storage');

// Creates a client
const storage = new Storage();

/**
 * TODO(developer): Uncomment the following lines before running the sample.
 */
// const bucketName = 'Name of a bucket, e.g. my-bucket';
// const srcFilename = 'File to move, e.g. file.txt';
// const destFilename = 'Destination for file, e.g. moved.txt';

// Moves the file within the bucket
await storage
  .bucket(bucketName)
  .file(srcFilename)
  .move(destFilename);

console.log(
  `gs://${bucketName}/${srcFilename} moved to gs://${bucketName}/${destFilename}.`
);

PHP

Para mais informações, consulte a documentação de referência da API do Cloud Storage para PHP.

use Google\Cloud\Storage\StorageClient;

/**
 * Move an object to a new name and/or bucket.
 *
 * @param string $bucketName the name of your Cloud Storage bucket.
 * @param string $objectName the name of your Cloud Storage object.
 * @param string $newBucketName the destination bucket name.
 * @param string $newObjectName the destination object name.
 *
 * @return void
 */
function move_object($bucketName, $objectName, $newBucketName, $newObjectName)
{
    $storage = new StorageClient();
    $bucket = $storage->bucket($bucketName);
    $object = $bucket->object($objectName);
    $object->copy($newBucketName, ['name' => $newObjectName]);
    $object->delete();
    printf('Moved gs://%s/%s to gs://%s/%s' . PHP_EOL,
        $bucketName,
        $objectName,
        $newBucketName,
        $newObjectName);
}

Python

Para mais informações, consulte a documentação de referência da API do Cloud Storage para Python.

from google.cloud import storage

def rename_blob(bucket_name, blob_name, new_name):
    """Renames a blob."""
    # bucket_name = "your-bucket-name"
    # blob_name = "your-object-name"
    # new_name = "new-object-name"

    storage_client = storage.Client()
    bucket = storage_client.bucket(bucket_name)
    blob = bucket.blob(blob_name)

    new_blob = bucket.rename_blob(blob, new_name)

    print("Blob {} has been renamed to {}".format(blob.name, new_blob.name))

Ruby

Para mais informações, consulte a documentação de referência da API do Cloud Storage para Ruby.

# project_id  = "Your Google Cloud project ID"
# bucket_name = "Your Google Cloud Storage bucket name"
# file_name   = "Name of file in Google Cloud Storage to rename"
# new_name    = "File will be renamed to this new name"

require "google/cloud/storage"

storage = Google::Cloud::Storage.new project_id: project_id
bucket  = storage.bucket bucket_name
file    = bucket.file file_name

renamed_file = file.copy new_name

file.delete

puts "#{file_name} has been renamed to #{renamed_file.name}"

APIs REST

API JSON

  1. Receba um token de acesso de autorização do OAuth 2.0 Playground. Configure o Playground para usar suas credenciais do OAuth.
  2. Use cURL para chamar a API JSON com uma solicitação de POST Objeto:

    curl -X POST \
      -H "Authorization: Bearer [OAUTH2_TOKEN]" \
      -H "Content-Length: 0" \
      "https://storage.googleapis.com/storage/v1/b/[BUCKET_NAME]/o/[OLD_OBJECT_NAME]/rewriteTo/b/[BUCKET_NAME]/o/[NEW_OBJECT_NAME]"

    Em que:

    • [OAUTH2_TOKEN] é o token de acesso gerado na Etapa 1;
    • [BUCKET_NAME] é o nome do intervalo que contém o objeto que você quer renomear. Por exemplo, my-bucket.
    • [OLD_OBJECT_NAME] é o nome do objeto que você quer renomear. Por exemplo, pets/dog.png.
    • [NEW_OBJECT_NAME] é o novo nome que você quer dar ao seu objeto. Por exemplo, pets/shiba.png.
  3. Use cURL para chamar a API JSON com uma solicitação de DELETE Objeto:

    curl -X DELETE \
      -H "Authorization: Bearer [OAUTH2_TOKEN]" \
      "https://storage.googleapis.com/storage/v1/b/[BUCKET_NAME]/o/[OLD_OBJECT_NAME]"

    Em que:

    • [OAUTH2_TOKEN] é o token de acesso gerado na Etapa 1;
    • [BUCKET_NAME] é o nome do intervalo que contém o objeto original e renomeado. Por exemplo, my-bucket.
    • [OLD_OBJECT_NAME] é o nome original do objeto. Por exemplo, pets/dog.png.

API XML

  1. Receba um token de acesso de autorização do OAuth 2.0 Playground. Configure o Playground para usar suas credenciais do OAuth.
  2. Use cURL para chamar a API XML com uma solicitação de PUT Objeto:

    curl -X PUT \
      -H "Authorization: Bearer [OAUTH2_TOKEN]" \
      -H "x-goog-copy-source: [BUCKET_NAME]/[OLD_OBJECT_NAME]" \
      "https://storage.googleapis.com/[BUCKET_NAME]/[NEW_OBJECT_NAME]"

    Em que:

    • [OAUTH2_TOKEN] é o token de acesso gerado na Etapa 1;
    • [BUCKET_NAME] é o nome do intervalo que contém o objeto que você quer renomear. Por exemplo, my-bucket.
    • [OLD_OBJECT_NAME] é o nome do objeto que você quer renomear. Por exemplo, pets/dog.png.
    • [NEW_OBJECT_NAME] é o novo nome que você quer dar ao seu objeto. Por exemplo, pets/shiba.png.
  3. Use cURL para chamar a API JSON com uma solicitação de DELETE Objeto:

    curl -X DELETE \
      -H "Authorization: Bearer [OAUTH2_TOKEN]" \
      "https://storage.googleapis.com/[BUCKET_NAME]/[OLD_OBJECT_NAME]"

    Em que:

    • [OAUTH2_TOKEN] é o token de acesso gerado na Etapa 1;
    • [BUCKET_NAME] é o nome do intervalo que contém o objeto original e renomeado. Por exemplo, my-bucket.
    • [OLD_OBJECT_NAME] é o nome original do objeto. Por exemplo, pets/dog.png.

Como copiar um objeto

Para copiar um objeto em um intervalo do Cloud Storage:

Console

  1. Abra o navegador do Cloud Storage no Console do Google Cloud.
    Abrir o navegador do Cloud Storage
  2. Procure o objeto que você quer copiar.

  3. Clique no menu de mais ações () associado ao objeto.

  4. Clique em Copiar.

  5. Na janela de sobreposição que aparece, clique em Procurar.

  6. Selecione o destino do objeto copiado e o nome que ele receberá.

  7. Clique em Selecionar.

  8. Clique em Copiar.

gsutil

Use o comando gsutil cp:

gsutil cp gs://[SOURCE_BUCKET_NAME]/[SOURCE_OBJECT_NAME] gs://[DESTINATION_BUCKET_NAME]/[NAME_OF_COPY]

Em que:

  • [SOURCE_BUCKET_NAME] é o nome do intervalo que contém o objeto que você quer copiar. Por exemplo, my-bucket.
  • [SOURCE_OBJECT_NAME] é o nome do objeto que você quer copiar. Por exemplo, pets/dog.png.
  • [DESTINATION_BUCKET_NAME] é o nome do intervalo em que você quer copiar seu objeto. Por exemplo, another-bucket.
  • [NAME_OF_COPY] é o nome que você quer dar à cópia do seu objeto. Por exemplo, shiba.png.

Se a operação for bem-sucedida, a resposta será parecida com esta:

Operation completed over 1 objects/58.8 KiB.

Códigos de amostra

C#

Para mais informações, consulte a documentação de referência da API do Cloud Storage para C#.

private void CopyObject(string sourceBucketName, string sourceObjectName,
    string destBucketName, string destObjectName)
{
    var storage = StorageClient.Create();
    storage.CopyObject(sourceBucketName, sourceObjectName,
        destBucketName, destObjectName);
    Console.WriteLine($"Copied {sourceBucketName}/{sourceObjectName} to "
        + $"{destBucketName}/{destObjectName}.");
}

Go

Para mais informações, consulte a documentação de referência da API do Cloud Storage para Go.

dstObject := srcObject + "-copy"
src := client.Bucket(srcBucket).Object(srcObject)
dst := client.Bucket(dstBucket).Object(dstObject)

if _, err := dst.CopierFrom(src).Run(ctx); err != nil {
	return err
}

Java

Para mais informações, consulte a documentação de referência da API do Cloud Storage para Java.

CopyWriter copyWriter = blob.copyTo(bucketName);
Blob copiedBlob = copyWriter.getResult();

Node.js

Para mais informações, consulte a documentação de referência da API do Cloud Storage para Node.js.

// Imports the Google Cloud client library
const {Storage} = require('@google-cloud/storage');

// Creates a client
const storage = new Storage();

/**
 * TODO(developer): Uncomment the following lines before running the sample.
 */
// const srcBucketName = 'Name of the source bucket, e.g. my-bucket';
// const srcFilename = 'Name of the source file, e.g. file.txt';
// const destBucketName = 'Name of the destination bucket, e.g. my-other-bucket';
// const destFilename = 'Destination name of file, e.g. file.txt';

// Copies the file to the other bucket
await storage
  .bucket(srcBucketName)
  .file(srcFilename)
  .copy(storage.bucket(destBucketName).file(destFilename));

console.log(
  `gs://${srcBucketName}/${srcFilename} copied to gs://${destBucketName}/${destFilename}.`
);

PHP

Para mais informações, consulte a documentação de referência da API do Cloud Storage para PHP.

use Google\Cloud\Storage\StorageClient;

/**
 * Copy an object to a new name and/or bucket.
 *
 * @param string $bucketName the name of your Cloud Storage bucket.
 * @param string $objectName the name of your Cloud Storage object.
 * @param string $newBucketName the destination bucket name.
 * @param string $newObjectName the destination object name.
 * @return void
 */
function copy_object($bucketName, $objectName, $newBucketName, $newObjectName)
{
    $storage = new StorageClient();
    $bucket = $storage->bucket($bucketName);
    $object = $bucket->object($objectName);
    $object->copy($newBucketName, ['name' => $newObjectName]);
    printf('Copied gs://%s/%s to gs://%s/%s' . PHP_EOL,
        $bucketName, $objectName, $newBucketName, $newObjectName);
}

Python

Para mais informações, consulte a documentação de referência da API do Cloud Storage para Python.

from google.cloud import storage

def copy_blob(
    bucket_name, blob_name, destination_bucket_name, destination_blob_name
):
    """Copies a blob from one bucket to another with a new name."""
    # bucket_name = "your-bucket-name"
    # blob_name = "your-object-name"
    # destination_bucket_name = "destination-bucket-name"
    # destination_blob_name = "destination-object-name"

    storage_client = storage.Client()

    source_bucket = storage_client.bucket(bucket_name)
    source_blob = source_bucket.blob(blob_name)
    destination_bucket = storage_client.bucket(destination_bucket_name)

    blob_copy = source_bucket.copy_blob(
        source_blob, destination_bucket, destination_blob_name
    )

    print(
        "Blob {} in bucket {} copied to blob {} in bucket {}.".format(
            source_blob.name,
            source_bucket.name,
            blob_copy.name,
            destination_bucket.name,
        )
    )

Ruby

Para mais informações, consulte a documentação de referência da API do Cloud Storage para Ruby.

# project_id         = "Your Google Cloud project ID"
# source_bucket_name = "Source bucket to copy file from"
# source_file_name   = "Source file name"
# dest_bucket_name   = "Destination bucket to copy file to"
# dest_file_name     = "Destination file name"

require "google/cloud/storage"

storage = Google::Cloud::Storage.new project_id: project_id
bucket  = storage.bucket source_bucket_name
file    = bucket.file source_file_name

destination_bucket = storage.bucket dest_bucket_name
destination_file   = file.copy destination_bucket.name, dest_file_name

puts "#{file.name} in #{bucket.name} copied to " +
     "#{destination_file.name} in #{destination_bucket.name}"

APIs REST

API JSON

  1. Receba um token de acesso de autorização do OAuth 2.0 Playground. Configure o Playground para usar suas credenciais do OAuth.
  2. Use cURL para chamar a API JSON com uma solicitação de POST Objeto:

    curl -X POST \
      -H "Authorization: Bearer [OAUTH2_TOKEN]" \
      -H "Content-Length: 0" \
      "https://storage.googleapis.com/storage/v1/b/[SOURCE_BUCKET_NAME]/o/[SOURCE_OBJECT_NAME]/rewriteTo/b/[DESTINATION_BUCKET_NAME]/o/[NAME_OF_COPY]"

    Em que:

    • [OAUTH2_TOKEN] é o nome do token de acesso gerado na Etapa 1;
    • [SOURCE_BUCKET_NAME] é o nome do intervalo que contém o objeto que você quer copiar. Por exemplo, my-bucket.
    • [SOURCE_OBJECT_NAME] é o nome do objeto que você quer copiar. Por exemplo, pets/dog.png.
    • [DESTINATION_BUCKET_NAME] é o nome do intervalo em que você quer copiar seu objeto. Por exemplo, another-bucket.
    • [NAME_OF_COPY] é o nome que você quer dar à cópia do seu objeto. Por exemplo, shiba.png.

API XML

  1. Receba um token de acesso de autorização do OAuth 2.0 Playground. Configure o Playground para usar suas credenciais do OAuth.
  2. Use cURL para chamar a API XML com uma solicitação de PUT Objeto:

    curl -X PUT \
      -H "Authorization: Bearer [OAUTH2_TOKEN]" \
      -H "x-goog-copy-source: [SOURCE_BUCKET_NAME]/[SOURCE_OBJECT_NAME]" \
      "https://storage.googleapis.com/[DESTINATION_BUCKET_NAME]/[NAME_OF_COPY]"

    Em que:

    • [OAUTH2_TOKEN] é o nome do token de acesso gerado na Etapa 1;
    • [SOURCE_BUCKET_NAME] é o nome do intervalo que contém o objeto que você quer copiar. Por exemplo, my-bucket.
    • [SOURCE_OBJECT_NAME] é o nome do objeto que você quer copiar. Por exemplo, pets/dog.png.
    • [DESTINATION_BUCKET_NAME] é o nome do intervalo em que você quer copiar seu objeto. Por exemplo, another-bucket.
    • [NAME_OF_COPY] é o nome que você quer dar à cópia do seu objeto. Por exemplo, shiba.png.

Como mover um objeto

Para mover um objeto no Cloud Storage, faça o seguinte:

Console

  1. Abra o navegador do Cloud Storage no Console do Google Cloud.
    Abrir o navegador do Cloud Storage
  2. Procure o objeto que você quer mover.

  3. Clique no menu de mais ações () associado ao objeto.

  4. Clique em Mover.

  5. Na janela de sobreposição que aparece, clique em Procurar.

  6. Selecione o destino do objeto que você está movendo.

  7. Clique em Selecionar.

  8. Clique em Mover.

gsutil

Use o comando gsutil mv:

gsutil mv gs://[SOURCE_BUCKET_NAME]/[SOURCE_OBJECT_NAME] gs://[DESTINATION_BUCKET_NAME]/[DESTINATION_OBJECT_NAME]

Em que:

  • [SOURCE_BUCKET_NAME] é o nome do intervalo que contém o objeto que você quer mover. Por exemplo, my-bucket.
  • [SOURCE_OBJECT_NAME] é o nome do objeto que você quer mover. Por exemplo, pets/dog.png.
  • [DESTINATION_BUCKET_NAME] é o nome do intervalo para o qual você quer mover seu objeto. Por exemplo, another-bucket.
  • [DESTINATION_OBJECT_NAME] é o nome que você quer dar ao objeto no novo local. Por exemplo, shiba.png.

Se a operação for bem-sucedida, a resposta será parecida com esta:

Operation completed over 1 objects/58.8 KiB.

Amostras de código

C++

Para mais informações, consulte a documentação de referência da API do Cloud Storage para C++.

namespace gcs = google::cloud::storage;
using ::google::cloud::StatusOr;
[](gcs::Client client, std::string bucket_name, std::string old_object_name,
   std::string new_object_name) {
  StatusOr<gcs::ObjectMetadata> object_metadata =
      client.RewriteObjectBlocking(bucket_name, old_object_name, bucket_name,
                                   new_object_name);

  if (!object_metadata) {
    throw std::runtime_error(object_metadata.status().message());
  }

  google::cloud::Status status =
      client.DeleteObject(bucket_name, old_object_name);

  if (!status.ok()) {
    throw std::runtime_error(status.message());
  }

  std::cout << "Renamed " << old_object_name << " to " << new_object_name
            << " in bucket " << bucket_name << "\n";
}

Java

Para mais informações, consulte a documentação de referência da API do Cloud Storage para Java.

CopyWriter copyWriter = blob.copyTo(destBucket, destBlob);
Blob copiedBlob = copyWriter.getResult();
boolean deleted = blob.delete();

PHP

Para mais informações, consulte a documentação de referência da API do Cloud Storage para PHP.

use Google\Cloud\Storage\StorageClient;

/**
 * Move an object to a new name and/or bucket.
 *
 * @param string $bucketName the name of your Cloud Storage bucket.
 * @param string $objectName the name of your Cloud Storage object.
 * @param string $newBucketName the destination bucket name.
 * @param string $newObjectName the destination object name.
 *
 * @return void
 */
function move_object($bucketName, $objectName, $newBucketName, $newObjectName)
{
    $storage = new StorageClient();
    $bucket = $storage->bucket($bucketName);
    $object = $bucket->object($objectName);
    $object->copy($newBucketName, ['name' => $newObjectName]);
    $object->delete();
    printf('Moved gs://%s/%s to gs://%s/%s' . PHP_EOL,
        $bucketName,
        $objectName,
        $newBucketName,
        $newObjectName);
}

APIs REST

API JSON

  1. Receba um token de acesso de autorização do OAuth 2.0 Playground. Configure o Playground para usar suas credenciais do OAuth.
  2. Use cURL para chamar a API JSON com uma solicitação de POST Objeto:

    curl -X POST \
      -H "Authorization: Bearer [OAUTH2_TOKEN]" \
      -H "Content-Length: 0" \
      "https://storage.googleapis.com/storage/v1/b/[SOURCE_BUCKET_NAME]/o/[SOURCE_OBJECT_NAME]/rewriteTo/b/[DESTINATION_BUCKET_NAME]/o/[DESTINATION_OBJECT_NAME]"

    Em que:

    • [OAUTH2_TOKEN] é o nome do token de acesso gerado na Etapa 1;
    • [SOURCE_BUCKET_NAME] é o nome do intervalo que contém o objeto que você quer mover. Por exemplo, my-bucket.
    • [SOURCE_OBJECT_NAME] é o nome do objeto que você quer mover. Por exemplo, pets/dog.png.
    • [DESTINATION_BUCKET_NAME] é o nome do intervalo para o qual você quer mover seu objeto. Por exemplo, another-bucket.
    • [DESTINATION_OBJECT_NAME] é o nome que você quer dar ao objeto no novo local. Por exemplo, shiba.png.
  3. Use cURL para chamar a API JSON com uma solicitação de DELETE Objeto:

    curl -X DELETE \
      -H "Authorization: Bearer [OAUTH2_TOKEN]" \
      "https://storage.googleapis.com/storage/v1/b/[SOURCE_BUCKET_NAME]/o/[SOURCE_OBJECT_NAME]"

    Em que:

    • [OAUTH2_TOKEN] é o token de acesso gerado na Etapa 1;
    • [SOURCE_BUCKET_NAME] é o nome do intervalo que contém o objeto original. Por exemplo, my-bucket.
    • [SOURCE_OBJECT_NAME] é o nome do objeto original. Por exemplo, pets/dog.png.

API XML

  1. Receba um token de acesso de autorização do OAuth 2.0 Playground. Configure o Playground para usar suas credenciais do OAuth.
  2. Use cURL para chamar a API XML com uma solicitação de PUT Objeto:

    curl -X PUT \
      -H "Authorization: Bearer [OAUTH2_TOKEN]" \
      -H "x-goog-copy-source: [SOURCE_BUCKET_NAME]/[SOURCE_OBJECT_NAME]" \
      "https://storage.googleapis.com/[DESTINATION_BUCKET_NAME]/[DESTINATION_OBJECT_NAME]"

    Em que:

    • [OAUTH2_TOKEN] é o nome do token de acesso gerado na Etapa 1;
    • [SOURCE_BUCKET_NAME] é o nome do intervalo que contém o objeto que você quer mover. Por exemplo, my-bucket.
    • [SOURCE_OBJECT_NAME] é o nome do objeto que você quer mover. Por exemplo, pets/dog.png.
    • [DESTINATION_BUCKET_NAME] é o nome do intervalo para o qual você quer mover seu objeto. Por exemplo, another-bucket.
    • [DESTINATION_OBJECT_NAME] é o nome que você quer dar ao objeto no novo local. Por exemplo, shiba.png.
  3. Use cURL para chamar a API JSON com uma solicitação de DELETE Objeto:

    curl -X DELETE \
      -H "Authorization: Bearer [OAUTH2_TOKEN]" \
      "https://storage.googleapis.com/[SOURCE_BUCKET_NAME]/[SOURCE_OBJECT_NAME]"

    Em que:

    • [OAUTH2_TOKEN] é o nome do token de acesso gerado na Etapa 1;
    • [SOURCE_BUCKET_NAME] é o nome do intervalo que contém o objeto original. Por exemplo, my-bucket.
    • [SOURCE_OBJECT_NAME] é o nome do objeto original. Por exemplo, pets/dog.png.

A seguir