Partilhar via


Inventário de blob de armazenamento do Azure

O inventário de blob do Armazenamento do Azure fornece uma lista dos contêineres, blobs, versões de blob e instantâneos em sua conta de armazenamento, juntamente com suas propriedades associadas. Ele gera um relatório de saída no formato CSV (valores separados por vírgula) ou Apache Parquet diariamente ou semanalmente. Você pode usar o relatório para auditar a retenção, retenção legal ou status de criptografia do conteúdo da sua conta de armazenamento, ou pode usá-lo para entender o tamanho total dos dados, idade, distribuição de camadas ou outros atributos de seus dados. Você também pode usar o inventário de blob para simplificar seus fluxos de trabalho de negócios ou acelerar os trabalhos de processamento de dados, usando o inventário de blob como uma automação programada das APIs Listar Contêineres e Listar Blobs . As regras de inventário de blob permitem filtrar o conteúdo do relatório por tipo de blob, prefixo ou selecionando as propriedades de blob a serem incluídas no relatório.

O inventário de blob do Armazenamento do Azure está disponível para os seguintes tipos de contas de armazenamento:

  • Padrão de uso geral v2
  • Armazenamento de blob de bloco premium
  • Armazenamento de Blobs

Recursos de inventário

A lista a seguir descreve os recursos e capacidades disponíveis na versão atual do inventário de blobs do Armazenamento do Azure.

  • Relatórios de inventário para blobs e contêineres

    Você pode gerar relatórios de inventário para blobs e contêineres. Um relatório para blobs pode conter blobs de base, instantâneos, comprimento de conteúdo, versões de blob e suas propriedades associadas, como tempo de criação, hora da última modificação. Os contêineres vazios não estão listados no relatório de inventário de blobs. Um relatório para contêineres descreve os contêineres e suas propriedades associadas, como status da política de imutabilidade, status de retenção legal.

  • Esquema personalizado

    Você pode escolher quais campos aparecem nos relatórios. Escolha a partir de uma lista de campos suportados. Essa lista aparece mais adiante neste artigo.

  • Formato de saída CSV e Apache Parquet

    Você pode gerar um relatório de inventário no formato de saída CSV ou Apache Parquet.

  • Arquivo de manifesto e evento da Grade de Eventos do Azure por relatório de inventário

    Um arquivo de manifesto e um evento de Grade de Eventos do Azure são gerados por relatório de inventário. Estão descritos posteriormente neste artigo.

Habilitando relatórios de inventário

Habilite relatórios de inventário de blob adicionando uma política com uma ou mais regras à sua conta de armazenamento. Para obter orientação, consulte Habilitar relatórios de inventário de blob do Armazenamento do Azure.

Atualizando uma política de inventário

Se você for um usuário existente do inventário de blob do Armazenamento do Azure que configurou o inventário antes de junho de 2021, poderá começar a usar os novos recursos carregando a política e, em seguida, salvando-a novamente depois de fazer alterações. Quando você recarregar a política, os novos campos na política serão preenchidos com valores padrão. Você pode alterar esses valores, se desejar. Além disso, os dois recursos a seguir estarão disponíveis.

  • Um contêiner de destino agora é suportado para cada regra, em vez de apenas ser suportado para a política.

  • Um arquivo de manifesto e um evento da Grade de Eventos do Azure agora são gerados por regra em vez de por política.

Política de inventário

Um relatório de inventário é configurado adicionando uma política de inventário com uma ou mais regras. Uma política de inventário é uma coleção de regras em um documento JSON.

{
  "enabled": true,
  "rules": [
  {
    "enabled": true,
    "name": "inventoryrule1",
    "destination": "inventory-destination-container",
    "definition": {. . .}
  },
  {
    "enabled": true,
    "name": "inventoryrule2",
    "destination": "inventory-destination-container",
    "definition": {. . .}
  }]
}

Exiba o JSON para uma política de inventário selecionando a guia Visualização de código na seção Inventário de Blob do portal do Azure.

Nome do parâmetro Tipo de parâmetro Notas Necessária?
ativado boolean Usado para desativar toda a política. Quando definido como true, o campo habilitado para nível de regra substitui esse parâmetro. Quando desativado, o inventário de todas as regras será desativado. Sim
regras Matriz de objetos de regra Pelo menos uma regra é necessária em uma política. Há suporte para até 100 regras por política. Sim

Regras de inventário

Uma regra captura as condições de filtragem e os parâmetros de saída para gerar um relatório de inventário. Cada regra cria um relatório de inventário. As regras podem ter prefixos sobrepostos. Um blob pode aparecer em mais de um inventário, dependendo das definições de regras.

Cada regra dentro da política tem vários parâmetros:

Nome do parâmetro Tipo de parâmetro Notas Necessária?
nome string Um nome de regra pode incluir até 256 caracteres alfanuméricos que diferenciam maiúsculas de minúsculas. O nome deve ser exclusivo dentro de uma política. Sim
ativado boolean Um sinalizador que permite que uma regra seja habilitada ou desabilitada. O valor padrão é true. Sim
Definição Definição da regra de inventário JSON Cada definição é composta por um conjunto de filtros de regras. Sim
destination string O contêiner de destino onde todos os arquivos de inventário são gerados. O contêiner de destino já deve existir.

O sinalizador global habilitado para inventário de Blob tem precedência sobre o parâmetro enabled em uma regra.

Definição da regra

Nome do parâmetro Tipo de parâmetro Notas Necessário
filtros json Os filtros decidem se um blob ou contêiner faz parte do inventário ou não. Sim
format string Determina a saída do arquivo de inventário. Os valores válidos são csv (Para formato CSV) e parquet (Para formato Apache Parquet). Sim
Tipo de objeto string Indica se esta é uma regra de inventário para blobs ou contêineres. Os valores válidos são blob e container. Sim
agendar string Cronograma no qual executar esta regra. Os valores válidos são daily e weekly. Sim
schemaFields Matriz Json Lista de campos de esquema a fazer parte do inventário. Sim

Filtros de regras

Vários filtros estão disponíveis para personalizar um relatório de inventário de blob:

Nome do filtro Tipo de filtro Notas Necessária?
blobTipos Matriz de valores de enum predefinidos Os valores válidos são blockBlob e appendBlob para contas habilitadas para namespace hierárquico e blockBlob, appendBlobe pageBlob para outras contas. Este campo não é aplicável para inventário em um contêiner (objectType: container). Sim
criaçãoTempo de criação Número Especifica o número de dias atrás dentro do qual o blob deve ter sido criado. Por exemplo, um valor de 3 inclui no relatório apenas os blobs, que foram criados nos últimos três dias. Não
prefixMatch Matriz de até 10 cadeias de caracteres para que os prefixos sejam correspondidos. Se você não definir prefixMatch ou fornecer um prefixo vazio, a regra se aplicará a todos os blobs na conta de armazenamento. Um prefixo deve ser um prefixo de nome de contêiner ou um nome de contêiner. Por exemplo, container, container1/foo. Não
excludePrefix Matriz de até 10 strings para prefixos a serem excluídos. Especifica os caminhos de blob a serem excluídos do relatório de inventário.

Um excludePrefix deve ser um prefixo de nome de contêiner ou um nome de contêiner. Um excludePrefix vazio significaria que todos os blobs com nomes correspondentes a qualquer string prefixMatch serão listados.

Se você quiser incluir um determinado prefixo, mas excluir algum subconjunto específico dele, então você pode usar o filtro excludePrefix. Por exemplo, se você quiser incluir todos os blobs emcontainer-a, exceto aqueles na pasta container-a/folder, prefixMatch deve ser definido como container-a e excludePrefix deve ser definido como container-a/folder.
Não
includeSnapshots boolean Especifica se o inventário deve incluir instantâneos. A predefinição é false. Este campo não é aplicável para inventário em um contêiner (objectType: container). Não
includeBlobVersions boolean Especifica se o inventário deve incluir versões de blob. A predefinição é false. Este campo não é aplicável para inventário em um contêiner (objectType: container). Não
incluirExcluído boolean Especifica se o inventário deve incluir blobs excluídos. A predefinição é false. Em contas que têm um namespace hierárquico, esse filtro inclui pastas e também inclui blobs que estão em um estado de exclusão suave.

Somente as pastas e arquivos (blobs) que são explicitamente excluídos aparecem nos relatórios. Pastas filhas e arquivos excluídos como resultado da exclusão de uma pasta pai não são incluídos no relatório.
Não

Exiba o JSON para regras de inventário selecionando a guia Visualização de código na seção Inventário de Blob do portal do Azure. Os filtros são especificados dentro de uma definição de regra.

{
  "destination": "inventory-destination-container",
  "enabled": true,
  "rules": [
  {
    "definition": {
      "filters": {
        "blobTypes": ["blockBlob", "appendBlob", "pageBlob"],
        "prefixMatch": ["inventorytestcontainer1", "inventorytestcontainer2/abcd", "etc"],
        "excludePrefix": ["inventorytestcontainer10", "etc/logs"],
        "includeSnapshots": false,
        "includeBlobVersions": true,
      },
      "format": "csv",
      "objectType": "blob",
      "schedule": "daily",
      "schemaFields": ["Name", "Creation-Time"]
    },
    "enabled": true,
    "name": "blobinventorytest",
    "destination": "inventorydestinationContainer"
  },
  {
    "definition": {
      "filters": {
        "prefixMatch": ["inventorytestcontainer1", "inventorytestcontainer2/abcd", "etc"]
      },
      "format": "csv",
      "objectType": "container",
      "schedule": "weekly",
      "schemaFields": ["Name", "HasImmutabilityPolicy", "HasLegalHold"]
    },
    "enabled": true,
    "name": "containerinventorytest",
    "destination": "inventorydestinationContainer"
    }
  ]
}

Campos de esquema personalizados suportados para inventário de blob

Nota

A coluna Armazenamento Data Lake mostra o suporte em contas que têm o recurso de namespace hierárquico habilitado.

Campo Armazenamento de Blob (suporte padrão) Data Lake Storage
Nome (Obrigatório) Sim Sim
Tempo de Criação Sim Sim
Última modificação Sim Sim
LastAccessTime1 Sim Sim
ETag Sim Sim
Comprimento do conteúdo Sim Sim
Tipo de Conteúdo Sim Sim
Codificação de conteúdo Sim Sim
Linguagem de conteúdo Sim Sim
Conteúdo-CRC64 Sim Sim
Conteúdo-MD5 Sim Sim
Cache-Controle Sim Sim
Cache-Disposição Sim Sim
BlobType Sim Sim
Camada de acesso Sim Sim
AccessTierChangeTime Sim Sim
LeaseStatus Sim Sim
LeaseState Sim Sim
ServidorCriptografado Sim Sim
CustomerProvidedKeySHA256 Sim Sim
Metadados Sim Sim
Prazo de validade Não Sim
hdi_isfolder Não Sim
Proprietário Não Sim
Agrupar Não Sim
Permissões Não Sim
ACL Não Sim
Snapshot (disponível e necessário quando você opta por incluir snapshots no relatório) Sim Sim
Eliminado Sim Sim
DeletedId Não Sim
DeletedTime Não Sim
RemainingRetentionDays Sim Sim
VersionId (Disponível e necessário quando você opta por incluir versões de blob em seu relatório) Sim No
IsCurrentVersion (Disponível e necessário quando você opta por incluir versões de blob em seu relatório) Sim No
TagCount Sim No
Etiquetas Sim No
CopyId Sim Sim
Fonte de cópia Sim Sim
CopyStatus Sim Sim
CopyProgress Sim Sim
CopyCompletionTime Sim Sim
CopyStatusDescrição Sim Sim
ImmutabilidadePolíticaAtéData Sim Sim
ImmutabilidadePolicyMode Sim Sim
LegalHold Sim Sim
RehydratePriority Sim Sim
ArquivamentoStatus Sim Sim
EncryptionScope Sim Sim
IncrementalCopy Sim Sim
x-ms-blob-número-sequência Sim No

1 Desativado por padrão. Opcionalmente, ative o rastreamento de tempo de acesso.

Campos de esquema personalizados suportados para inventário de contêineres

Nota

A coluna Armazenamento Data Lake mostra o suporte em contas que têm o recurso de namespace hierárquico habilitado.

Campo Armazenamento de Blob (suporte padrão) Data Lake Storage
Nome (Obrigatório) Sim Sim
Última modificação Sim Sim
ETag Sim Sim
LeaseStatus Sim Sim
LeaseState Sim Sim
Duração do Arrendamento Sim Sim
Metadados Sim Sim
Acesso Público Sim Sim
DefaultEncryptionScope Sim Sim
DenyEncryptionScopeOverride Sim Sim
HasImmutabilidadePolítica Sim Sim
HasLegalHold Sim Sim
ImmutableStorageWithVersioningEnabled Sim Sim
Excluído (Aparece somente se incluir contêineres excluídos estiver selecionado) Sim Sim
Versão (aparece somente se incluir contêineres excluídos estiver selecionado) Sim Sim
DeletedTime (aparecerá somente se incluir contêineres excluídos estiver selecionado) Sim Sim
RemainingRetentionDays (aparecerá somente se incluir contêineres excluídos estiver selecionado) Sim Sim

Execução de inventário

Se você configurar uma regra para ser executada diariamente, ela será agendada para ser executada todos os dias. Se você configurar uma regra para ser executada semanalmente, ela será agendada para ser executada toda semana no horário UTC de domingo.

A maioria dos inventários é concluída em 24 horas. Para contas habilitadas para namespace hierárquico, uma execução pode levar até dois dias e, dependendo do número de arquivos que estão sendo processados, a execução pode não ser concluída até o final desses dois dias. O tempo máximo que uma execução pode concluir antes de falhar é de seis dias.

As execuções não se sobrepõem, portanto, uma execução deve ser concluída antes que outra execução da mesma regra possa começar. Por exemplo, se uma regra estiver agendada para ser executada diariamente, mas a execução dessa mesma regra no dia anterior ainda estiver em andamento, uma nova execução não será iniciada nesse dia. As regras programadas para serem executadas semanalmente serão executadas todos os domingos, independentemente de uma execução anterior ser bem-sucedida ou falhar. Se uma execução não for concluída com êxito, verifique as execuções subsequentes para ver se elas foram concluídas antes de entrar em contato com o suporte. O desempenho de uma execução pode variar, portanto, se uma execução não for concluída, é possível que as execuções subsequentes o façam.

As políticas de inventário são lidas ou escritas na íntegra. Não há suporte para atualizações parciais. As regras de inventário são avaliadas diariamente. Portanto, se você alterar a definição de uma regra, mas as regras de uma política já tiverem sido avaliadas para esse dia, suas atualizações não serão avaliadas até o dia seguinte.

Evento de inventário concluído

O BlobInventoryPolicyCompleted evento é gerado quando a execução do inventário é concluída para uma regra. Esse evento também ocorre se a execução do inventário falhar com um erro do usuário antes de começar a ser executada. Por exemplo, uma política inválida ou um erro que ocorre quando um contêiner de destino não está presente acionará o evento. O json a seguir mostra um evento de exemplo BlobInventoryPolicyCompleted .

{
  "topic": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/BlobInventory/providers/Microsoft.EventGrid/topics/BlobInventoryTopic",
  "subject": "BlobDataManagement/BlobInventory",
  "eventType": "Microsoft.Storage.BlobInventoryPolicyCompleted",
  "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "data": {
    "scheduleDateTime": "2021-05-28T03:50:27Z",
    "accountName": "testaccount",
    "ruleName": "Rule_1",
    "policyRunStatus": "Succeeded",
    "policyRunStatusMessage": "Inventory run succeeded, refer manifest file for inventory details.",
    "policyRunId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    "manifestBlobUrl": "https://testaccount.blob.core.windows.net/inventory-destination-container/2021/05/26/13-25-36/Rule_1/Rule_1-manifest.json"
  },
  "dataVersion": "1.0",
  "metadataVersion": "1",
  "eventTime": "2021-05-28T15:03:18Z"
}

A tabela a seguir descreve o BlobInventoryPolicyCompleted esquema do evento.

Campo Tipo Description
programaçãoDataHora string A hora em que a regra de inventário foi agendada.
accountName string O nome da conta de armazenamento.
ruleName string O nome da regra.
policyRunStatus string O status da execução do inventário. Os valores possíveis são Succeeded, PartiallySucceedede Failed.
policyRunStatusMessage string A mensagem de status da execução do inventário.
policyRunId string A ID de execução da política para a execução do inventário.
manifestBlobUrl string A URL de blob para o arquivo de manifesto para execução de inventário.

Produção de inventário

Cada regra de inventário gera um conjunto de arquivos no contêiner de destino de inventário especificado para essa regra. A saída de estoque é gerada sob o seguinte caminho: https://<accountName>.blob.core.windows.net/<inventory-destination-container>/YYYY/MM/DD/HH-MM-SS/<ruleName onde:

  • accountName é o nome da sua conta de Armazenamento de Blobs do Azure.
  • inventory-destination-container é o contêiner de destino especificado na regra de inventário.
  • AAAA/MM/DD/HH-MM-SS é o momento em que o inventário começou a ser executado.
  • ruleName é o nome da regra de inventário.

Arquivos de inventário

Cada execução de inventário para uma regra gera os seguintes arquivos:

  • Arquivo de inventário: uma execução de inventário para uma regra gera um arquivo formatado CSV ou Apache Parquet. Cada um desses arquivos contém objetos correspondentes e seus metadados.

    Importante

    A partir de outubro de 2023, as execuções de inventário produzirão vários arquivos se a contagem de objetos for grande. Para saber mais, consulte Perguntas frequentes sobre saída de vários arquivos de inventário.

    Os relatórios no formato Apache Parquet apresentam datas no seguinte formato: timestamp_millis [number of milliseconds since 1970-01-01 00:00:00 UTC]. Para um arquivo formatado em CSV, a primeira linha é sempre a linha do esquema. A imagem a seguir mostra um arquivo CSV de inventário aberto no Microsoft Excel.

    Captura de ecrã de um ficheiro CSV de inventário aberto no Microsoft Excel

    Importante

    Os caminhos de blob que aparecem em um arquivo de inventário podem não aparecer em nenhuma ordem específica.

  • Arquivo de soma de verificação: um arquivo de soma de verificação contém a soma de verificação MD5 do conteúdo de manifest.json arquivo. O nome do arquivo de soma de verificação é <ruleName>-manifest.checksum. A geração do arquivo de soma de verificação marca a conclusão de uma execução de regra de inventário.

  • Arquivo de manifesto: um arquivo de manifest.json contém os detalhes do(s) arquivo(s) de inventário gerado(s) para essa regra. O nome do arquivo é <ruleName>-manifest.json. Esse arquivo também captura a definição de regra fornecida pelo usuário e o caminho para o inventário dessa regra. O json a seguir mostra o conteúdo de um arquivo de manifest.json de exemplo.

    {
    "destinationContainer" : "inventory-destination-container",
    "endpoint" : "https://testaccount.blob.core.windows.net",
    "files" : [
      {
        "blob" : "2021/05/26/13-25-36/Rule_1/Rule_1.csv",
        "size" : 12710092
      }
    ],
    "inventoryCompletionTime" : "2021-05-26T13:35:56Z",
    "inventoryStartTime" : "2021-05-26T13:25:36Z",
    "ruleDefinition" : {
      "filters" : {
        "blobTypes" : [ "blockBlob" ],
        "includeBlobVersions" : false,
        "includeSnapshots" : false,
        "prefixMatch" : [ "penner-test-container-100003" ]
      },
      "format" : "csv",
      "objectType" : "blob",
      "schedule" : "daily",
      "schemaFields" : [
        "Name",
        "Creation-Time",
        "BlobType",
        "Content-Length",
        "LastAccessTime",
        "Last-Modified",
        "Metadata",
        "AccessTier"
      ]
    },
    "ruleName" : "Rule_1",
    "status" : "Succeeded",
    "summary" : {
      "objectCount" : 110000,
      "totalObjectSize" : 23789775
    },
    "version" : "1.0"
    }
    

    Este arquivo é criado quando a execução começa. O status campo deste arquivo é definido como Pending até que a execução seja concluída. Após a conclusão da execução, este campo é definido como um status de conclusão (Por exemplo: Succeeded ou Failed).

Preços e faturação

O preço do inventário é baseado no número de blobs e contêineres que são verificados durante o período de faturamento. A página de preços do Armazenamento de Blobs do Azure mostra o preço por um milhão de objetos examinados. Por exemplo, se o preço para digitalizar um milhão de objetos for $0.003, sua conta contiver três milhões de objetos e você produzir quatro relatórios em um mês, sua fatura será 4 * 3 * $0.003 = $0.036.

Depois que os arquivos de inventário forem criados, serão incorridos encargos adicionais padrão de armazenamento de dados e operações para armazenar, ler e gravar os arquivos gerados pelo inventário na conta.

Se uma regra contiver um prefixo que se sobreponha a um prefixo de qualquer outra regra, o mesmo blob poderá aparecer em mais de um relatório de inventário. Nesse caso, você será cobrado por ambas as instâncias. Por exemplo, suponha que o prefixMatch elemento de uma regra está definido como ["inventory-blob-1", "inventory-blob-2"], e o prefixMatch elemento de outra regra está definido como ["inventory-blob-10", "inventory-blob-20"]. Um objeto nomeado inventory-blob-200 aparece em ambos os relatórios de inventário.

Os instantâneos e versões de um blob também contam para o faturamento, mesmo que você tenha definido includeSnapshots e includeVersions filtrado como false. Esses valores de filtro não afetam o faturamento. Você pode usá-los apenas para filtrar o que aparece no relatório.

Para obter mais informações sobre preços para o inventário de blob do Armazenamento do Azure, consulte Preços do Armazenamento de Blobs do Azure.

Suporte de funcionalidades

O suporte para esse recurso pode ser afetado pela habilitação do Data Lake Storage Gen2, do protocolo NFS (Network File System) 3.0 ou do SSH File Transfer Protocol (SFTP). Se você habilitou qualquer um desses recursos, consulte Suporte ao recurso de Armazenamento de Blob nas contas de Armazenamento do Azure para avaliar o suporte para esse recurso.

Problemas e limitações conhecidos

Esta seção descreve limitações e problemas conhecidos do recurso de inventário de blob de Armazenamento do Azure.

Em certos casos, os trabalhos de inventário demoram mais tempo a ser concluídos

Um trabalho de inventário pode levar mais tempo nestes casos:

  • Uma grande quantidade de novos dados é adicionada

  • Uma regra ou um conjunto de regras está sendo executado pela primeira vez

    A execução de inventário pode levar mais tempo para ser executada em comparação com as execuções de inventário subsequentes.

  • Uma execução de inventário está processando uma grande quantidade de dados em contas habilitadas para namespace hierárquico

    Um trabalho de inventário pode levar mais de um dia para ser concluído para contas habilitadas para namespace hierárquico que tenham centenas de milhões de blobs. Às vezes, o trabalho de inventário falha e não cria um arquivo de inventário. Se um trabalho não for concluído com êxito, verifique os trabalhos subsequentes para ver se estão concluídos antes de entrar em contato com o suporte.

  • Não há opção para gerar um relatório retrospetivamente para uma data específica.

Os trabalhos de inventário não podem gravar relatórios em contêineres que tenham uma política de replicação de objetos

Uma política de replicação de objetos pode impedir que um trabalho de inventário grave relatórios de inventário no contêiner de destino. Alguns outros cenários podem arquivar os relatórios ou torná-los imutáveis quando estiverem parcialmente concluídos, o que pode causar falhas nos trabalhos de inventário.

Inventário e armazenamento imutável

Não é possível configurar uma política de inventário na conta se o suporte para imutabilidade no nível da versão estiver habilitado nessa conta ou se o suporte para imutabilidade no nível da versão estiver habilitado no contêiner de destino definido na política de inventário.

Os relatórios podem excluir blobs excluídos por software em contas que têm um namespace hierárquico

Se um contêiner ou diretório for excluído com soft-delete habilitado, o contêiner ou diretório e todo o seu conteúdo serão marcados como soft-delete. No entanto, somente o contêiner ou diretório (relatado como um blob de comprimento zero) aparece em um relatório de inventário e não os blobs excluídos por software nesse contêiner ou diretório, mesmo que você defina o includeDeleted campo da política como true. Isso pode levar a uma diferença entre o que aparece nas métricas de capacidade que você obtém no portal do Azure e o que é relatado por um relatório de inventário.

Somente os blobs excluídos explicitamente aparecem nos relatórios. Portanto, para obter uma lista completa de todos os blobs excluídos por software (diretório e todos os blobs filho), as cargas de trabalho devem excluir cada blob em um diretório antes de excluir o próprio diretório.

Próximos passos