Direto ao ponto: sincronizando no Linux com Google Drive e rclone.
Instalar e Configurar o rclone
Instalar
curl https://rclone.org/install.sh | sudo bash
# checar a versão
rclone version
Configurar
# executar
rclone config
Responder de acordo com o que está abaixo
n/s/q> n
name> GoogleDrive (dê o nome que preferir)
Storage> 13
client_id> (deixar em branco, ENTER)
client_secret> (deixar em branco, ENTER)
scope> 1
root_folder_id> (deixar em branco, ENTER)
service_account_file> (deixar em branco, ENTER)
Edit advanced config? (y/n) n
Use auto config? y
Em seguida deve aparecer um link similar ao link abaixo e o browser deve abrir automaticamente, caso não clique no link para abrir.
Então:
- Esse link redireciona para a tela de login com o Google.
- Confirme o login.
- Deve aparecer no browser a mensagem abaixo:
Success!
All done. Please go back to rclone.
Volte para o console (que deve ter tido alteração!) E continue respondendo:
Configure this as a team drive? n
y) Yes this is OK [ y ]
q) Quit config [ q ]
Nesse ponto toda a configuração deve está ok.
Testando
# Lista os drivers remotos
rclone listremotes
# Listar o conteúdo
rclone ls --max-depth 1 GoogleDrive:/
# ou
rclone ls GoogleDrive:/
--max-depth 1
vai listar apenas a pasta raiz
Especificar o que deve ser sincronizando
Nem sempre desejamos sincronizar todo o drive. Vamos especificar o que sincronizar. Para isso criar o arquivo filter-file-GoogleDrive.txt
(dê o nome que preferir) e especificar o que deve ou não ser sincronizado, conforme conteúdo de exemplo abaixo.
- Com sinal de
+
deve sincronizar - Com sinal de
-
não deve sincronizar - Mais detalhes aqui
# Sincronizar
+ /Aplicativos/**
+ /Apostilas/**
+ /Backup/**
+ /Pasta\ Com\ Espaco/**
+ /Documentos/**
+ /Gifs/**
# Nao sincronizar
- *
Sincronizar do Google Drive para uma pasta local
Adicionar a opção
--dry-run
após orclone sync
para ver o resultado sem efetivar as mudanças
rclone sync \
--create-empty-src-dirs \
--progress \
--drive-acknowledge-abuse \
--filter-from filter-file-GoogleDrive.txt \
GoogleDrive:/ /root/GoogleDrive/
Sincronizar de uma pasta local para o Google Drive
Adicionar a opção
--dry-run
após orclone sync
para ver o resultado sem efetivar as mudanças
rclone sync \
--create-empty-src-dirs \
--progress \
--drive-acknowledge-abuse \
--filter-from filter-file-GoogleDrive.txt \
/root/GoogleDrive/ GoogleDrive:/
Sincronizando em ambos os sentidos
O rclone sync
só faz sincronização em um único sentido. Ele só altera a pasta de destino, como pode ser visto na documentação aqui.
Vamos usar o rclonesync.py
para isso, que é indicado no próprio site do rclone
aqui.
# download
wget https://raw.githubusercontent.com/cjnaz/rclonesync-V2/f2316cfeebda1532c343890668ec972bf3bb276e/rclonesync.py
# tornar executável
chmod +x rclonesync.py
Primeira Execução
Na primeira sincronização é necessário executar com o parâmetro
--first-sync
É possível usar o parâmetro--dry-run
para ver o resultado sem efetivar as mudanças Observar que primeiro a pasta local e em seguida a pasta remota (em tese mudar a ordem não deve alterar o resultado)
./rclonesync.py /root/GoogleDrive/ GoogleDrive:/ \
--filters-file filter-file-GoogleDrive.txt \
--verbose \
--first-sync \
--rclone-args --drive-export-formats=.link.html --drive-acknowledge-abuse
Execuções subsequentes
As execuções subsequentes não devem ter o parâmetro
--first-sync
./rclonesync.py /root/GoogleDrive/ GoogleDrive:/ \
--filters-file filter-file-GoogleDrive.txt \
--verbose \
--rclone-args --drive-acknowledge-abuse --drive-skip-gdocs
# ou
./rclonesync.py /root/GoogleDrive/ GoogleDrive:/ \
--filters-file filter-file-GoogleDrive.txt \
--verbose \
--rclone-args --drive-acknowledge-abuse --drive-export-formats=.link.html
A opção
--drive-skip-gdocs
não sincroniza os arquivos do Google Docs, que no sistema de arquivos local seriam apenas atalhos. Caso queira sincronizar os arquivos do Google Docs, use a opção--drive-export-formats=.link.html
que atualmente é documentada aqui e aqui A opção--drive-acknowledge-abuse
permite sincronizar arquivos que o Google Drive acha suspeitos (ex: malware).
Automizando
Afinal não queremos ficar executando manualmente. Vamos agendar a sincronização no cron.
crontab -e
Adicionar o código abaixo que agenda a execução a cada 5 minutos.
*/5 * * * * ./rclonesync.py /root/GoogleDrive/ GoogleDrive:/ \
--filters-file filter-file-GoogleDrive.txt \
--verbose \
--rclone-args \
--drive-acknowledge-abuse \
--drive-export-formats=.link.html >> ~/GoogleDrive_rclonesync.log 2>&1