Usar Google Drive desde una terminal en linux

En esta entrada voy a hablar sobre drive, un programa que permite usar Google Drive desde una terminal. El programa fue credo por Jaana B. Dogan quien trabajaba como parte del equipo a cargo de Google Drive, así que hay la garantía de que el código fue escrito por alguien que conoce a la perfección el servicio.

Este cliente permite hacer pulls y pushes de archivos muy parecido a lo que se hace con un repositorio en GitHub, la analogía va más allá, hay la posibilidad de crear un archivo .driveignore que cumple la misma función que .gitignore, permitiendo omitir archivos o directorios a partir de una lista de nombres o expresiones regulares.

Drive no tiene la intención de ser un cliente que automáticamente sincroniza tus archivos, la programadora que lo creó lo hizo intencionalmente porque «la sincronización automática no es para todos». Por supuesto uno puede escribir un script para sincronizar automáticamente o usar crontab para hacer respaldos periódicos. Este repositorio que contiene algunos scripts para dichos escenarios, pero no los he probado.

Instalación

Se pueden encontrar paquetes para varias distribuciones, yo uso OpenSuse y Ubuntu así que son las que voy a describir.

Para Ubuntu existe un ppa, esto hace la instalación muy sencilla, hay que abrir una terminal y ejecutar los siguientes comandos.

sudo add-apt-repository ppa:twodopeshaggy/drive
sudo apt-get update
sudo apt-get install drive

En OpenSuse el proceso es ligeramente más complicado, primero hay que instalar las dependencias:

sudo zypper in go mercurial git hg-git

Luego creamos el directorio donde instalaremos drive y lo agregamos al PATH.

export GOPATH=$HOME/go
export PATH=$PATH:$GOPATH/bin

Para que esto sea permanente hay que añadirlo al final de nuestro archivo .bashrc. Finalmente podemos descargar y compilar drive

go get github.com/odeke-em/drive/cmd/drive

Inicializar una carpeta

Para poder usar drive es necesario inicializar la carpeta que sincronizaremos con nuestra cuenta. Yo usualmente creo una garpeta llamada gdrive en mi carpeta personal, luego uso enlaces (con ln -s) para agregar directorios adicionales que quiero sincronizar.

Primero hay que crear la carpeta y movernos hacia ella.

mkdir gdrive
cd gdrive

ahora inicializamos el directorio con el siguiente comando:

drive init

Esto generará un enlace para permitir que drive acceda a tu cuenta de google, al abrirlo en tu navegador te pedirá que inicies sesión en tu cuenta y posteriormente generará en código de autorización que tendrás que copiar para luego pegarlo en la terminal

Uso básico

Como ejemplo vamos a crear dos carpetas llamadas foo y bar en el directorio gdrive y agregar un par de archivos a la carpeta foo

mkdir foo bar
touch foo/test1.txt foo/test2.txt.swp

Omitir directorios y archivos

Ahora supongamos que solo queremos sincronizar foo y omitir bar, además quiero omitir todos los archivos que terminen en swp. Para eso crearemos el archivo .driveignore y lo abrimos con nuestro editor favorito. Yo prefiero vim así que desde una terminal abro el archivo con:

vim .driveignore

y agregamos lo siguiente

bar
\.swp$

Comparar archivos remotos y locales

Para comparar los archivos que existen en tu computadora con los archivos almacenados remotamente usamos diff:

drive diff

Éste es el mensaje que muestra mi computadora:

geriom@geri_laptop:gdrive>drive diff
/Preview2.pdf only on remote
/foo only on local
/foo/test1.txt only on local

Lo que muestra que en mi cuenta de google drive ya existe un archivo remoto llamado Preview2.pdf, además muestra los archivos locales que creé en la sección anterior y que no están incluidos en mi .driveignore.

Descargar archivos desde google drive

El comando más simple para descargar el contenido remoto a nuestro directorio local es

drive pull

pero esto sincronizará las carpetas para que tengan el mismo contenido y borrará todos los archivos locales que no estén en el directorio remoto. En este caso quiero conservar mis archivos locales y sólo descargar Preview.pdf, así que uso el nombre de archivo como argumento en el comando anterior.

geriom@geri_laptop:gdrive>drive pull Preview2.pdf
Resolving...
+ /Preview2.pdf
Addition count 1 src: 23.36KB
Proceed with the changes? [Y/n]: /
 23924 / 23924 [=========================================] 100.00% 0s

Listo, el archivo ahora está en mi computadora

geriom@geri_laptop:gdrive>ls
bar  foo  Preview2.pdf

Agregar archivos a google drive

Para sincronizar completamente nuestra carpeta local en google drive usamos

drive push

Lo que creará una copia de nuestros archivos y borrará todos los archivos existentes en google drive que no estén sincronizados con nuestra computadora.

Por supuesto podemos sincronizar carpetas y archivos específicos, sólo hay que usar los nombres correspondientes. Por ejemplo, para sincronizar únicamente la carpeta foo:

geriom@geri_laptop:gdrive>drive push foo
+ /foo
     + /foo/test1.txt
     Addition count 3

Otras opciones

El software soporta una gran cantidad de opciones como encriptación, publicación, eliminar y mover archivos, compartir, enviar por correo electrónico, etc. Consulta el repositorio de drive para ver la documentación completa (en inglés).