Pesquisa de site

Como gerenciar arquivos no armazenamento em nuvem com Rclone no Linux


Rclone é um programa de linha de comando gratuito e de código aberto para gerenciar arquivos em serviços de armazenamento em nuvem como Google Drive, Backblaze B2, Amazon S3 e muitos mais. O aplicativo é escrito na linguagem de programação Go e seu código-fonte está hospedado no GitHub. Neste tutorial aprendemos como instalar o Rclone nas distribuições Linux mais utilizadas e como realizar operações básicas como copiar, sincronizar, mover e excluir dados. No processo, também vemos como obter credenciais da API do Google Drive e como configurar um controle remoto do Google Drive para Rclone.

Neste tutorial você aprenderá:

  • Como instalar o Rclone em algumas das distribuições Linux mais usadas
  • Como obter credenciais da API do Google Drive e configurar um controle remoto do Google Drive Rclone
  • Como usar o Rclone para gerenciar dados no armazenamento em nuvem

Instalação

Rclone está disponível nos repositórios oficiais de todas as principais distribuições Linux. Para instalar o programa no Fedora, executamos:

$ sudo dnf install rclone

O mesmo comando pode ser usado para instalar o Rclone no RHEL, Rocky Linux e AlmaLinux, porém, nessas distribuições, antes de prosseguir com a instalação, precisamos adicionar o repositório EPEL às fontes de software do sistema.

No Debian e em distribuições baseadas em Debian, instalamos o Rclone usando apt:

$ sudo apt install rclone

Rclone também está disponível no repositório “extra” do Archlinux; podemos instalar o pacote com pacman:

$ sudo pacman -S rclone

Obtenção de credenciais de API para o Google Drive

Para este tutorial, usaremos o Google Drive como campo de testes de armazenamento em nuvem para Rclone. Embora seja possível usar credenciais nativas da API do Google Drive do Rclone, elas são compartilhadas entre todos os usuários do Rclone e têm um número limitado de consultas por segundo. Para garantir a operabilidade, podemos querer criar o nosso próprio.

Para obter nossas credenciais do Google Drive, acessamos o Google Cloud Console e adicionamos um novo projeto. Clicamos no menu suspenso “Selecionar um projeto” e depois em “Novo projeto”:

Precisamos escolher um nome para o nosso projeto. Aqui simplesmente usamos “rclone”:

Quando estiver pronto, clicamos no botão “criar”. O projeto será criado com um ID gerado aleatoriamente. Para selecionar nosso projeto, clicamos mais uma vez no menu suspenso “Selecionar um projeto”. Desta vez, porém, escolhemos o projeto que acabamos de criar:

Na próxima etapa, precisamos adicionar a API do Google Drive ao nosso projeto. Procuramos por “Google Drive API” e clicamos no primeiro resultado:

Uma vez na página da API do Google Drive, ativamos a API clicando no botão “Ativar”; seremos redirecionados para a página de detalhes do serviço API. Neste ponto, clicamos no item “Credenciais” do menu vertical esquerdo:

Agora precisamos configurar uma tela de consentimento para nosso projeto, para isso clicamos no botão “Configurar tela de consentimento”:

Escolhemos “Externo” como tipo de usuário, a seguir clicamos no botão “Criar”:

Na próxima página, devemos fornecer informações sobre nosso aplicativo. No mínimo, devemos inserir o “Nome do aplicativo”, um e-mail de suporte ao usuário e informações de contato do desenvolvedor. Quando estiver pronto, clicamos em “Salvar e continuar”:

A seguir, precisamos selecionar quais escopos atribuir à nossa aplicação. Esses são basicamente os privilégios que o aplicativo terá no armazenamento do Google Drive. Para adicionar um escopo, clicamos no botão “Adicionar ou remover escopos”, então, para garantir que o Rclone é capaz de realizar todos os tipos de operações, escolhemos ../auth-docs, ../auth-drive e ../auth/drive.metadata.readonly:

Feito isso, clicamos no botão “Atualizar” e a seguir em “Salvar e continuar”. Agora precisamos adicionar nossa própria conta como usuário de teste. Clicamos no botão “Adicionar usuários” e inserimos o endereço de e-mail que queremos usar. Ao terminar, clicamos no botão “Adicionar” e, mais uma vez, em “Salvar e continuar”:

Na próxima página poderemos dar uma olhada no resumo das configurações do aplicativo. Neste ponto, precisamos clicar novamente na entrada “Credenciais” no menu vertical esquerdo. Uma vez na página de credenciais, clicamos em “Criar credenciais” e depois em “ID do cliente OAuth”:

Na próxima página selecionamos “Aplicativo de desktop” como tipo de aplicativo. Podemos deixar o nome do cliente gerado automaticamente. Quando estiver pronto, clicamos no botão “Criar”:

As credenciais OAuth serão geradas. Devemos anotá-los (podemos recuperá-los facilmente mais tarde na página “Credenciais”, de qualquer maneira):

Como última etapa, clicamos na tela de consentimento do OAuth no menu vertical esquerdo e, a seguir, no botão “Publicar aplicativo”:

Teoricamente deveríamos preparar e enviar o aplicativo ao Google para verificação, porém, deveríamos poder usar o “aplicativo” de qualquer maneira. Agora que temos nossas próprias credenciais de API do Google Drive, podemos ver como configurar um controle remoto Rclone.

Criando uma configuração Rclone do Google Drive

A maneira mais fácil de criar uma configuração remota do Google Drive para Rclone é usar a configuração guiada. Para iniciar o “assistente”, executamos:

$ rclone config

Rclone nos pedirá para escolher uma ação. Selecionamos “n” para criar um novo controle remoto:

No remotes found - make a new one
n) New remote
s) Set configuration password
q) Quit config
n/s/q> n

Devemos fornecer um nome para o “remoto”. Neste caso usamos apenas “gdrive”:

name> gdrive

Em seguida, precisamos escolher o armazenamento em nuvem apropriado em uma lista. A posição exata do Google Drive na lista pode variar. Nas versões recentes do Rclone, deveria ser 18:

Storage> 18

Neste ponto, precisamos inserir as credenciais do Google Drive que geramos na etapa anterior:

client_id> <your-client-id-here>
client_secret> <your-client-secret-here>

Após inserir nossas credenciais, precisamos selecionar os escopos que o Rclone deve utilizar. Neste caso, escolhemos “1”:

Choose a number from below, or type in your own value.
 1 / Full access all files, excluding Application Data Folder.
   \ "drive"
 2 / Read-only access to file metadata and file contents.
   \ "drive.readonly"
   / Access to files created by rclone only.
 3 | These are visible in the drive website.
   | File authorization is revoked when the user deauthorizes the app.
   \ "drive.file"
   / Allows read and write access to the Application Data folder.
 4 | This is not visible in the drive website.
   \ "drive.appfolder"
   / Allows read-only access to file metadata but
 5 | does not allow any access to read or download file content.
   \ "drive.metadata.readonly"
scope> 1

No próximo prompt o Rclone nos pergunta se queremos usar um arquivo JSON de credencial de conta de serviço, podemos deixar o campo em branco e apenas pressionar “Enter”:

Option service_account_file.
Service Account Credentials JSON file path.
Leave blank normally.
Needed only if you want use SA instead of interactive login.
Leading `~` will be expanded in the file name as will environment variables such as `${RCLONE_CONFIG_DIR}`.
Enter a value. Press Enter to leave empty.
service_account_file>

Também podemos pular a edição da configuração avançada:

Edit advanced config?
y) Yes
n) No (default)
y/n> n

Em seguida, precisamos escolher se queremos usar um prompt do navegador para autenticar o Rclone com nosso aplicativo Google Drive. Respondemos afirmativamente:

Use web browser to automatically authenticate rclone with remote?
* Say Y if the machine running rclone has a web browser you can use
* Say N if running rclone on a (remote) machine without web browser access
If not sure try Y. If Y failed, try N.

y) Yes (default)
n) No
y/n> y

Assim que pressionarmos enter, uma guia do navegador será aberta. Como dissemos anteriormente, veremos um aviso pois o aplicativo não é verificado pelo google. Para prosseguir com a autenticação, clicamos em “Avançado” e depois em “Ir para rclone (inseguro)”:

Temos que confirmar que queremos conceder ao aplicativo os privilégios solicitados. Para confirmar, clicamos em “Continuar”:

De volta ao terminal, podemos escolher se queremos configurar um Drive Compartilhado.  Neste caso, podemos fornecer uma resposta negativa:

Configure this as a Shared Drive (Team Drive)?

y) Yes
n) No (default)
y/n> n

Por fim, para confirmar e manter o controle remoto, respondemos afirmativamente ao último prompt:

Keep this "gdrive" remote?
y) Yes this is OK (default)
e) Edit this remote
d) Delete this remote
y/e/d> y

Para sair do assistente, selecionamos “q” no último prompt:

Controles remotos atuais:

Name Type
==== ====
gdrive drive

e) Edit existing remote
n) New remote
d) Delete remote
r) Rename remote
c) Copy remote
s) Set configuration password
q) Quit config
e/n/d/r/c/s/q> q

Usando rclone

Rclone fornece muitos comandos que podemos usar para gerenciar dados no armazenamento em nuvem. Aqui não podemos fornecer uma lista detalhada, mas podemos ver como realizar operações básicas como copiar, sincronizar, mover e excluir dados.

Listando arquivos e diretórios no controle remoto

Para obter uma lista dos arquivos atualmente hospedados em um armazenamento em nuvem, executamos rclone com o comando ls. Para ver os arquivos disponíveis no controle remoto do Google Drive, executaríamos:

$ rclone ls gdrive:/

O comando retorna a seguinte saída:

37 file1.txt
 5 file0.txt

Como você pode ver, existem apenas dois arquivos hospedados no Google Drive: arquivo1.txt e arquivo0.txt: seu tamanho é informado no início da linha, em bytes . Para obter mais informações sobre cada arquivo, podemos utilizar o comando lsl, que retorna também o horário da modificação:

$ rclone lsl gdrive:
       37 2024-05-24 14:56:03.931000000 file1.txt
        5 2024-05-24 14:55:55.889000000 file0.txt

Ambos os comandos ls e lsl funcionam recursivamente, então eles listam arquivos também contidos em subdiretórios, mas não incluem diretórios em sua saída. Para realmente recuperar uma lista dos diretórios existentes no controle remoto, usamos o comando lsd:

$ rclone lsd gdrive:
           -1 2024-05-24 15:47:24 -1 mydir

Ao contrário de ls e lsl, lsd funciona de forma não recusiva, a menos que usemos a opção -R:

$ rclone lsd -R gdrive: 
           -1 2024-05-24 15:47:24 -1 mydir
           -1 2024-05-24 15:52:41 -1 mydir/one

Para listar arquivos e diretórios e obter uma saída fácil de analisar, adequada para uso em scripts, podemos usar outros dois comandos: lsf e lsjson. Ambos funcionam de forma não recursiva; o primeiro retorna apenas o nome dos arquivos e diretórios, um por linha:

$ rclone lsf gdrive:
file0.txt
file1.txt
mydir/

Este último, em vez disso, retorna a saída no formato JSON:

[
{"Path":"file0.txt","Name":"file0.txt","Size":5,"MimeType":"text/plain","ModTime":"2024-05-24T12:55:55.889Z","IsDir":false,"ID":"1keyQCpqiyQbiF6FWUjR4Mb2petECgFkE"},
{"Path":"file1.txt","Name":"file1.txt","Size":37,"MimeType":"text/plain","ModTime":"2024-05-24T12:56:03.931Z","IsDir":false,"ID":"1Aia5gGkvGEe40BlXQah7g3DZWjnCkxxJ"},
{"Path":"mydir","Name":"mydir","Size":-1,"MimeType":"inode/directory","ModTime":"2024-05-24T13:47:24.355Z","IsDir":true,"ID":"1qR6DF7ybJ29ghcUowvqiBowfxDNQf7yg"}
]

Copiando arquivos e diretórios

Para copiar arquivos de e para um armazenamento remoto, usamos o comando copy. Suponha que queiramos copiar file0.txt do Google Drive para o diretório de trabalho atual no host local; nós correríamos:

$ rclone copy gdrive:/file0.txt .

Podemos copiar um diretório da mesma maneira, mas devemos lembrar que Rclone copia o conteúdo de um diretório, não o diretório em si. Além disso, ele ignora a cópia de subdiretórios vazios, a menos que usemos a opção --create-empty-src-dirs.

Ao usar a cópia, são criados arquivos existentes na origem que não existem no destino e os arquivos existentes são atualizados. Às vezes, queremos alterar esse comportamento para que os arquivos existentes no destino permaneçam intactos. Um caso comum é copiar um backup de um repositório local para um remoto, para evitar a propagação de possíveis corrupções de snapshots antigos. Para implementar tal comportamento podemos usar a opção --immutable: isso faz com que uma operação de cópia falhe se implicar na modificação de arquivos existentes no destino (observe, porém, que isso, no momento da escrita, não funciona ao copiar arquivos únicos – veja este bug aberto no repositório Rclone GitHub).

Mover e renomear arquivos e diretórios

Para mover arquivos, usamos o comando move. Suponha que queiramos mover file0.txt do controle remoto para nosso host local. Correríamos:

$ rclone move gdrive:/file0.txt .

Como esta é uma operação potencialmente destrutiva, primeiro podemos querer iniciar o comando com a opção --dry-run, que apenas simula a operação.

Se quisermos renomear um arquivo, usamos o comando moveto. Suponha que queiramos renomear file0.txt para file00.txt no controle remoto; nós correríamos:

$ rclone moveto gdrive:/file0.txt gdrive:/file00.txt

O mesmo comando pode ser usado se quisermos fazer upload de um arquivo, mas armazená-lo com outro nome:

$ rclone moveto file0.txt gdrive:/file00.txt

Sincronizando diretórios com o comando sync

Outro comando que podemos usar para copiar dados de e para um armazenamento remoto é sync. A principal diferença entre sync e copy é que o primeiro cria uma cópia espelhada da origem para o destino. Em outras palavras, os arquivos que existem na origem, mas não no destino, são copiados e os arquivos modificados são atualizados. Além disso, os arquivos que não existem na origem, mas estão presentes no destino, são removidos.

Suponha que queremos sincronizar o conteúdo do diretório local mydir, com o mesmo diretório remoto (ele é criado se não existir); nós correríamos:

$ rclone sync mydir gdrive:/mydir

Você pode entender facilmente por que esse comando deve ser usado com cautela. É possível usar a opção --imutable também ao usar o comando sync; isso fará com que o comando recuse a atualização dos arquivos modificados, embora ainda seja capaz de excluir arquivos no destino que não existem na origem.

Excluindo arquivos e diretórios

Para remover arquivos e diretórios podemos usar o comando delete. Supondo que desejamos remover o arquivo file0.txt do controle remoto, executaríamos:

$ rclone delete gdrive:/file0.txt

Quando usamos o comando delete em um diretório, apenas o conteúdo do diretório é removido, enquanto o próprio diretório permanece no lugar. Se o diretório contiver subdiretórios, eles também permanecerão intactos, a menos que usemos a opção --rmdirs (o diretório raiz ainda será preservado).

Para remover todos os arquivos de um diretório, exceto alguns, podemos especificar um padrão como argumento da opção --exclude. Para excluir todos os arquivos do diretório “mydir”, exceto aqueles com extensão “.txt”, por exemplo, executaríamos:

$ rclone delete --exclude=*.txt gdrive:/mydir

Os arquivos também podem ser filtrados dependendo do tamanho e de outros parâmetros. Apenas como exemplo, para excluir apenas arquivos >= 100 MiB, executaríamos:

$ rclone delete --min-size=100MiB gdrive:/mydir

Para garantir que removeremos apenas arquivos únicos, podemos usar o comando deletefile. Finalmente, para remover um diretório junto com seu conteúdo, podemos usar o comando purge:

$ rclone purge gdrive:/mydir

Por padrão, arquivos e diretórios excluídos são movidos para a lixeira do Google Drive: para excluir um arquivo pulando a lixeira, no entanto, podemos usar a opção --drive-use-trash=false. Para listar os arquivos da lixeira, usamos o comando ls com a opção --drive-trashed-only. Por fim, para esvaziar a lixeira, usamos o comando cleanup:

$ rclone cleanup gdrive:/

Montando o armazenamento remoto como um sistema de arquivos

Rclone é capaz de montar um armazenamento remoto como um disco de rede, usando fuse (sistema de arquivos no espaço do usuário). No nosso caso, para montar o controle remoto “gdrive” no diretório ~/Public, executaríamos:

$ rclone mount gdrive:/ ~/Public

Quando iniciado em primeiro plano, o comando bloqueia o terminal enquanto o controle remoto estiver montado. Para desmontar o sistema de arquivos podemos simplesmente pressionar CTRL-c ou enviar explicitamente um sinal SIGINT ou SIGTERM para o processo.

Pensamentos finais

Neste tutorial vimos como instalar o Rclone em algumas das distribuições Linux mais utilizadas e como utilizá-lo para realizar operações básicas em um armazenamento remoto. No processo, aprendemos como obter credenciais da API do Google Drive e como criar uma configuração remota do Google Drive para Rclone. Há muito mais que pode ser feito com o Rclone do que falamos neste artigo; para saber mais sobre todos os comandos disponíveis e suas opções, dê uma olhada no site oficial do projeto, ou execute cada comando com a opção -h.

Artigos relacionados: