En la entrada anterior vimos cómo instalar RClone en GNU/Linux. Hacer lo mismo en Windows o en MacOS es también muy fácil. Solamente tienes que descargar el paquete adecuado desde la página de descargas.

Como ya comenté, RClone tiene soporte multiplataforma, por lo que tiene prácticamente las mismas funciones en los tres sistemas operativos.

En este artículo vamos a ver cómo utilizarlo para sincronizar tus archivos locales con servicios en la nube.

Comandos más útiles de RClone

Recuerda que el comando rclone --help te dará un lista de todos los comandos. Además con rclone <comando> --help podrás acceder a la ayuda específica del comando que quieras.

rclone listremotes proporciona la lista de almacenamientos que has configurado en RClone.

rclone about <remote> devuelve información sobre el espacio ocupado y el disponible en el almacenamiento especificado.

Los comandos básicos de RClone son muy parecidos a sus equivalentes en Linux.

Listado de ficheros

Todos estos comandos dan información sobre el contenido de un directorio, ya sea local o remoto.

El comando ls lista los ficheros que hay en la carpeta, de manera recursiva, junto con su tamaño en bytes.

$ rclone ls mi_disco_OneDrive:
    1041013 Introducción a OneDrive.pdf

Si quieres obtener también la fecha de modificación tendrás que usar el comando lsl.

$ rclone lsl mi_disco_OneDrive:
    1041013 2018-08-27 18:03:43.313000000 Introducción a OneDrive.pdf

lsd te da la lista de directorios, pero solamente los del primer nivel. Es decir, no lo hace de forma recursiva.

$ rclone lsd mi_disco_OneDrive:
    -1 2018-08-27 18:03:44         0 Documentos
    -1 2018-08-27 18:03:43         0 Imágenes

Para ver todos los ficheros y directorios usa el comando lsf. El comando tree también muestra la misma información pero el resultado lo da en una estructura en forma de árbol.

$ rclone lsf mi_disco_OneDrive:
Documentos/
Imágenes/
Introducción a OneDrive.pdf 
$ rclone tree mi_disco_OneDrive:
/
├── Documentos
├── Imágenes
└── Introducción a OneDrive.pdf

Copiar ficheros

rclone copy <origen> <destino> permite copiar ficheros entre el origen y el destino. Es tan fácil como suena. Tanto origen como destino pueden ser archivos locales como aquellos que tengamos alojados en almacenamientos en la nube.

Como ejemplo he creado un fichero, que copiaré a la carpeta de OneDrive que utilicé en el tutorial anterior.

$ rclone copy fichero.txt mi_disco_OneDrive

$ rclone lsl mi_disco_OneDrive:
    1041013 2018-08-27 18:03:43.313000000 Introducción a OneDrive.pdf
         18 2018-09-23 11:38:26.000000000 fichero.txt

Borrar ficheros

Con rclone delete <archivo o directorio> puedes borrar ficheros o el contenido de un directorio. Debes tener en cuenta que este proceso puede ser irreversible, dependiendo de si tu proveedor de almacenamiento en la nube permite la recuperación de ficheros borrados.

Puedes hacer una simulación para probar si el comando va a funcionar como quieres incluyendo el modificador --dry-run

$ rclone delete mi_disco_OneDrive:fichero.txt --dry-run
2018/10/13 20:20:03 NOTICE: fichero.txt Not deleting as --dry-run

Este comando, como los demás, admite multitud de modificadores. Por ejemplo si quieres borrar los archivos grandes puedes usar el modificador --min-size 10M, borrará los archivos mayores de 10 MBytes.

Consultar el tamaño de un directorio

Un comando muy útil es size. Con rclone size <directorio> podrás saber el espacio que ocupan todos los archivos contenidos en un directorio y todos sus subdirectorios.

$ rclone size mi_disco_OneDrive:
Total objects: 4
Total size: 1.986 MBytes (2082062 Bytes)

Otros comandos, como mkdirmove, moveto ó rmdir te permiten gestionar carpetas y archivos. Lee con atención la ayuda y descubrirás comandos y modificadores muy útiles.

Sincronizar un directorio

La función realmente útil de RClone, para la que está diseñado, es la sincronización de directorios tanto locales como remotos.

Para utilizar almacenamientos remotos, debes haberlos registrado antes como aparece en el anterior artículo sobre rclone.

Realizar una sincronización es muy sencillo. El comando que necesitas es similar a éste

rclone sync <directorio local> <almacenamiento remoto>:<directorio remoto>

Este comando copia los archivos nuevos y borra los que ya no están en el origen. Si no quieres eliminar los archivos borrados tendrás que usar el comando rclone copy.

Recuerda que puedes usar cualquier combinación de directorios locales o remotos para, por ejemplo, sincronizar una carpeta de Google Drive con otra de Microsoft OneDrive, o una carpeta de Mega con un directorio local.

Cuando dos directorios se han sincronizado una primera vez, en el futuro solamente se transfieren los archivos que se han modificado. Esto tiene la gran ventaja de reducir sensiblemente la cantidad de datos que hay transferir.

Debes tener en cuenta que RClone comprueba diferencias para ficheros completos. No realiza, por tanto, una copia diferencial de un archivo en el que hayan cambiado solamente unos pocos bytes. Los archivos se copian completos. Esto se debe a que, a día de hoy, los almacenamientos en la nube no suelen permitir transferencias parciales de archivos.

Cuando llamas cualquier comando de RClone, lo haces desde tu usuario. Como consecuencia de esto, RClone tendrá los mismos permisos que tú tienes para gestionar los ficheros de tu sistema. Siempre puedes utilizar el comando sudo en GNU/Linux o iniciarlo en como Administrador en Windows para arrancarlo con máximos privilegios, pero debes tener en cuenta que la configuración de RClone es específica para cada usuario por lo que tendrás que configurar los almacenamientos para el usuario root o administrador con el comando rclone config.

Filtrado de archivos

En todas las acciones en la que se opera con ficheros o directorios, RClone permite definir unas reglas de filtrado, de manera que es muy fácil sincronizar una estructura de archivos, seleccionando cuáles queremos tener en cuenta y cuáles otros no.

Las expresiones de RClone utilizan un lenguaje prácticamente idéntico al que utiliza la herramienta rsync. Este lenguaje es conocido como "file globs" y se utiliza también en la shell de GNU/Linux.

Estas son las opciones relativas al filtrado y la selección de archivos:

--exclude <expresión>

Excluye fichero según la expresión. Para copiar todos los archivos excepto los que terminen en .tmp podemos utilizar esta línea de comando

rclone copy --exclude "*.tmp" mi_directorio_local mi_disco_OneDrive:/directorio_destino

El modificador --exclude se puede repetir para añadir varias reglas en un mismo comando

--exclude-from <fichero>

Lee varias expresiones de exclusión desde un fichero de texto. Es muy útil cuando necesitas definir reglas complejas. Solamente necesitas crear un fichero con las reglas utilizando el mismo lenguaje glob.

## exclude.txt

.*
.*/**
*.tmp

Este archivo permite filtrar los ficheros ocultos, los directorios ocultos y los ficheros con extensión *.tmp

rclone copy --exclude-from "exclude.txt" mi_directorio_local mi_disco_OneDrive:/directorio_destino

--exclude-if-present <expresión>

Excluye un directorio completo si alguno de los ficheros que contiene cumple con la expresión. Puede ser muy útil para excluir de una acción directorios mediante la creación de un fichero vacío con nombre, por ejemplo, .ignore

rclone copy --exclude-if-present ".ignore" mi_directorio_local mi_disco_OneDrive:/directorio_destino

**--include <expresión>** --include-from <fichero>

Estos modificadores realizan la función inversa a los anteriores. Solamente procesan los ficheros y directorios que cumplen con la expresión.

--ignore-existing

Ignora los archivos existentes en el destino.

--filter <expresión> Permite definir reglas de inclusión y/o exclusión. Cuando quieres utilizar reglas más complicadas, donde tienes ficheros que incluir, pero quieres excluir algunos de ellos --filter te permite simplificar la definición de estas reglas. Simplemente tienes que añadir un símbolo + ó - delante para definir reglas de inclusión o exclusión.

Estos dos comandos son equivalentes

rclone copy --filter "- *.tmp" mi_directorio_local mi_disco_OneDrive:/directorio_destino
rclone copy --exclude "*.tmp" mi_directorio_local mi_disco_OneDrive:/directorio_destino 

--filter-from <fichero>

La verdadera potencia de las reglas de filtrado está en el modificador --filter-from en el que se utiliza un fichero de texto para definir todas las reglas que necesitemos.

## filter.txt

+ *.jpg
+ *.png
- borrados/**
+ *.txt

El comando siguiente, utilizando esta definición de filtros copiará todas las imágenes en formato jpg y png y los archivos de texto, excepto aquellos dentro del directorio borrados.

rclone copy --filter-from "filter.txt" mi_directorio_local mi_disco_OneDrive:/directorio_destino

Otros comandos para filtrar archivos, en función de sus características, son:

--min-size <tamaño> Ignora los archivos cuyo tamaño es más pequeño que el especificado --max-size <tamaño> Ignora los archivos cuyo tamaño es más grande que el especificado --max-age <edad> Ignora los archivos con antigüedad mayor a la especificada --min-age <edad> Ignora los archivos con antigüedad menor a la especificada

Conclusiones

En este tutorial has aprendido cómo utilizar RClone para sincronizar directorios de tu ordenador con servicios en la nube.

Puedes pensar que esto es todo, pero hay mucho más. En la próxima entrada veremos cómo utilizar el cifrado para aumentar la privacidad de nuestras copias en la nube, cuando sea necesario.