Интерес к применению rclone явился следствием поиска какого-либо решения, которое позволило бы взаимодействовать с Облако@Mail.Ru после прекращения Mail.Ru поддержки клиента синхронизации для Linux. А возможность использования rclone для взаимодействия с Диском Google и Microsoft OneDrive придало дополнительное ускорение изучению данного вопроса.
Приводимые сценарии на bash (скрипты bash) для автоматизации процессов копирования, перемещения и синхронизации данных с облачными хранилищами Dropbox, Microsoft OneDrive, Диск Google, Box.net, Jottacloud, MEGA, pCloud, Яндекс Диск, Облако@Mail.Ru создавались для своих нужд и использования в системах Linux Mint 18.3 и Linux Mint 19.2.
Ожидается, что повторяемость приводимых сценариев будет достаточно высока. Теоретически, всё должно работать, но, как говорится, даже самая маленькая практика стоит самой большой теории. В приводимых листингах вместо manager и minter не забудьте указывать имя своего домашнего каталога. Также следует иметь в виду, что некоторые команды для Вашей оболочки (Cimnnamon, MATE и др.) могут быть другими. Примеры приводятся для XFCE, о чём в скобках даются пояснения.
Сценарии оформляются как исполняемые файлы sh, запуск которых производится
по расписанию или через кнопки запуска (дополнительно читать
здесь или
здесь).
Надеюсь, читатель простит меня за такое пространное вступление, после которого, наконец-то, перехожу непосредственно к заявленной теме публикации.
Здесь вам не равнина, здесь – климат иной ... (Высоцкий В.С.)
Говоря простым языком, rclone является инструментом, написанным на языке Go, с помощью которого, хотя и через командную строку, можно напрямую взаимодействовать с содержимым своего облачного хранилища данных без необходимости установки десктопного клиента синхронизации. Под прямым взаимодействием имею в виду интересующие меня операции копирования, перемещения, синхронизации. Со списком поддерживаемых ПО rclone облачных хранилищ можно ознакомиться на сайте
https://rclone.org Справа от каждого наименования можно увидеть такие значки как "домик" и "книга". "Домик" содержит ссылку на главную страницу ресурса, а "книга" – ссылку на пример настройки для него rclone. Например,
К сожалению русскоговорящих пользователей, ресурс является англоязычным, поэтому при описании своих реализаций публикация содержит примеры настроек для используемых мной ресурсов облачного хранения данных.
Получить rclone
Скачать ПО rclone можно со страницы
https://downloads.rclone.org/ Для установки текущей версии ПО мной был скачан deb-пакет, в наименовании которого присутствует слово current:
ПО предыдущих версий смотрите в соответствующей папке с начала страницы и вниз.
Настройка rclone
Для настройки rclone выполните в терминале команду
rclone config
Если у Вас уже имеются настроенные варианты соединений, то они отобразятся под записью Current remotes.
Current remotes:
Name Type
==== ====
CA dropbox
Jotta-2 jottacloud
SA dropbox
Ниже следуют варианты "что делать":
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>
e – редактировать существующее соединение;
n – новое соединение;
d – удалить существующее соединение;
r – переименовать имя соединения
c – копировать настройку;
s – установить конфигурационный пароль;
q – выйти из режима настройки.
При выборе нового соединения rclone запросит его имя (
как вы яхту назовёте, так она и поплывёт). Команды работы с rclone в качестве указания удалённого ресурса будут содержать имя соединения.
После ввода имени соединения необходимо цифрой указать облачное хранилище, на которое далее будет настраиваться rclone.
Листинги с пояснениями осуществлённых мной настроек на свои облачные ресурсы хранения данных содержатся ниже.
Как указывалось выше, имя настроенного соединения можно изменить, например:
e/n/d/r/c/s/q> r
Choose a number from below, or type in an existing value
1 > CA
2 > MS
3 > SA
4 > Sv
remote> 4
Enter new name for "Sv" remote.
name> VS
Current remotes:
Name Type
==== ====
CA dropbox
MS onedrive
SA dropbox
VS dropbox
Файл с настройками rclone расположен в скрытом каталоге домашнего каталога пользователя:
~/.config/rclone/rclone.conf
Команды действий в rclone
Все возможные команды rclone перечислены на странице
https://rclone.org/docs
Ниже будет приводиться пояснение используемых мной команд.
Синтаксис команды очень прост:
rclone действие откуда куда
"Откуда" и "куда" указывают на локальный каталог (папку) компьютера или каталог (папку) выбранного облачного ресурса.
Весь облачный ресурс указывается в виде имя_соединения:
Например, для перечисленных в примере выше указание всего облака будет в виде CA: MS: SA: VS:
Для работы с конкретной папкой облака её имя указывается сразу после двоеточия, например:
CA:Входящие или
MS:Музыка/Инструментальная .
Дополнительная информация: в качестве указателей "откуда" и "куда" могут использоваться и подключения к ресурсам облачного хранения данных.
Получить список содержимого
Возможные команды:
rclone tree,
rclone ls,
rclone lsd,
rclone lsl.
rclone tree – отобразить содержание в виде дерева;
rclone ls – отобразить объекты с указанием размера и пусти;
rclone lsd – отобразить все папки/контейнеры c их именами и количеством содержащихся в них элементов;
rclone lsl – отобразить все объекты, их пути и размеры.
Результаты вывода показаны на рисунках ниже:
Можно создать сценарии на bash, которые будут осуществлять сохранение данного вывода в файл или для отображения вывода в терминале или через zenity.
Просто вывод в текстовый файл:
#bin/bash
rclone tree MS:Audio > /home/manager/Reports/MS.txt
exit
Вывод в окно терминала (пример для xfce):
#!/bin/bash
xfce4-terminal --geometry=80x35 -x sh -c 'rclone tree MS:Audio; exec bash'
--geometry=80x35 – это ширина и высота окна терминала.
Вывод в zenity:
#bin/bash
file=/home/manager/Reports/MS.txt
rclone tree MS:Audio > $file
zenity --text-info --width "600" --height "400" --title "Содержание ресурса" --filename=$file
rm $file
exit
-width "600" --height "400" – это ширина и высота окна.
--title "Содержание ресурса" – это заголовок окна.
После нажатия на кнопку ОК данное окно будет закрыто и выполнится последующая команда удаления файла MS.txt, который представляет из себя список содержимого.
Копировать, переместить
Так как rclone мной в большей части используется для автоматизации процессов, то ниже приводятся примеры сценариев, которые запускаются
по расписанию, но даётся и пример интерактивного отображения.
Команды:
rclone copy,
rclone copyto,
rclone move,
rclone moveto
rclone copy – копировать файлы из источника в назначение, существующие файлы не перезаписываются;
rclone copyto – копировать файлы из источника в назначение, пропускаемые файлы уже скопированы;
rclone move – переместить файлы из источника в назначение;
rclone moveto – переместить файл или каталог из источника в назначение.
Следует иметь в виду, что при операции осуществляются только с содержимым источника и назначения. То есть при этих операциях имена и местоположение самих источника и назначения остаются неизменными.
Пример:
#!/bin/bash
# Log creation
day=`date '+%m-%d'`
report=/home/minter/Dropbox/Reports/SA/$day.rclone.txt
if [ -f $report ]; then
:
else
> $report
time=`date '+%H-%M-%S'`
echo "$time -- rclone log created" >> $report
fi
# Transfer messages
sm=/home/minter/Clouds/rsync/SA
dm=SA:Input/Сообщения
count=`find $sm -type f | wc -l`
if [ $count -eq 0 ];
then
time=`date '+%H-%M-%S'`
echo "$time -- no items to transfer" >> $report
else
time=`date '+%H-%M-%S'`
echo "$time -- start of transmission" >> $report
echo "* * *" >> $report
ls $sm >> $report
echo "* * *" >> $report
rclone move $sm $dm
time=`date '+%H-%M-%S'`
echo "$time -- all items transferred" >> $report
fi
exit
Приведенный сценарий осуществляет перемещение содержимого каталога /home/minter/Clouds/rsync/SA в папку Input/Сообщения облака под именем соединения SA. Осуществляемые действия протоколируются в файл отчёта /home/minter/Dropbox/Reports/SA/$day.rclone.txt, в имени которого присутствует дата. То есть файл отчёта имеет наименование, например 11-07.rclone.txt (ноябрь 7-го). Файл отчёта создаётся ежедневно. Если такой файл существует, то операция его создания не производится. В файл отчёта включается время начала передачи, список передаваемых файлов и время завершения передачи. Передача производится в том случае, если в каталоге (папке) источника найден хотя бы 1 файл. Если ни одного файла не найдено, то запуск rclone не осуществляется, а в файл отчёта вносится запись о том, что для передачи ничего не имеется (no items to transfer). Для повышения читаемости файла отчёта в него дополнительно включаются разделители вида * * *. Пример:
06-30-01 -- rclone log created
06-30-01 -- start of transmission
* * *
11-09.No.313.03-50.pdf
11-09.No.313.05-01.pdf
Поля сражений (1-10 серии).html
* * *
06-30-05 -- all items transferred
Если при передаче больших объемов данных необходимо контролировать ход процесса, то после команды необходимо добавить ключ --progress. Пример:
Пример сценария:
#!/bin/bash
xfce4-terminal --geometry=80x35 -x sh -c 'rclone move --progress /home/minter/00 Box-1:Books; exec bash'
По завершении операции будет отображено приглашение командной строки, например:
Сколько данные занимают места на облаке
Команда:
rclone size
Примечание: если у Вас много данных, то процесс может занять время.
Например:
Сценарий 1:
#!/bin/bash
xfce4-terminal --geometry=80x35 -x sh -c 'rclone size MS:Audio; exec bash'
Сценарий 2 (через zenity):
#bin/bash
file=/home/manager/Reports/MS.txt
rclone size MS:Audio > $file
zenity --text-info --width "300" --height "180" --title "Занимаемое место" --filename=$file
rm $file
exit
Сколько занято и сколько доступно на облаке
Команда:
rclone about
Выводятся значения Total (выделено облаком), Used (использовано), Free (свободно), Trashed (в Корзине).
Пример:
Сценарий 1 (пример для xfce):
#!/bin/bash
xfce4-terminal --hold -e "rclone about MS:"
Сценарий 2 (zenity):
#bin/bash
file=/home/manager/Reports/MS.txt
rclone about MS: > $file
zenity --text-info --width "300" --height "180" --title "Занимаемое место" --filename=$file
rm $file
exit
Синхронизация данных
Команда:
rclone sync
Следует отметить, что синхронизация данных производится только в 1 направлении, то есть является односторонней. Если, например, Вы синхронизируете данные компьютера с облаком, то произведенные, допустим, через браузер операции перемещения или удаления в облаке при следующем сеансе синхронизации на Ваш компьютер переданы не будут, а произведенные через браузер изменения в облаке будут отменены.
Пример сценария:
#!/bin/bash
day=`date '+%m-%d'`
sm=/home/minter/FBbooks
dm=MEGA-3:FBbooks-H-4
report=/home/minter/Dropbox/Reports/MEGA-3/$day.list.txt
# Syncronize
rclone sync $sm $dm
rclone tree MEGA-3: > $report
exit
В этом сценарии после завершения синхронизации формируется список содержания синхронизируемого ресурса, который экспортируется в файл txt /home/minter/Dropbox/Reports/MEGA-3/$day.list.txt
Другие команды rclone
Ниже приводится несколько команд, которые мной не используются, но которые могут быть востребованы в Вашем случае.
rclone delete – удалить контент пути (например удалить содержимое ресурса SA:Input/Сообщения);
rclone purge – удалить путь и весь его контент (насколько предполагаю, применительно к предыдущему случаю будет удалена папка Сообщения со всем её содержимым);
rclone mkdir – создать путь (каталог), если он не существует;
rclone rmdir – удалить путь (вероятно, каталог);
rclone rmdirs – удалить пустые каталоги, расположенные ниже пути (имеются в виду вложенные каталоги);
rclone check – проверить, совпадают ли файлы источника и назначения;
rclone dedupe – интерактивно найти дубликаты файлов и их удалить/переименовать;
rclone mount – монтировать облако или его папку в каталог компьютера. Например, rclone mount MS:Audio /home/manager/00. Для отмонтирования в документации rclone указано, что нужно отправить сигнал SIGTERM.
Для своих нужд создавались 2 сценария: монтирование и отмотирование.
Для монтирования, например, всего облака с именем SA:
#!/bin/sh
rclone mount SA: /home/minter/00 &
exit
Всё пространство облака SA монтируется в каталог
/home/minter/00
Символ & позволяет завершить сценарий, то есть выполнить команду exit при сохранении подключения к облаку.
Для отмонтирования, то есть отправки SIGTERM, соответствующему команде
kill, необходимо знать номер процесса.
Пример сценария отмонтирования:
#!/bin/sh
client="$(pidof rclone mount SA: /home/minter/00)"
kill ${client}
exit
Пример перемещения данных в ЛВС по ftp
Если в папке с данными будет найден хотя бы 1 файл, то rclone будет выполняться.
#!/bin/bash
cur=/home/manager/RClone/Curious
hum=/home/manager/RClone/Humour
sm=/home/manager/RClone/SA
count1=`find $cur -type f | wc -l`
if [ $count1 -eq 0 ];
then
:
else
rclone move $cur H-4:Clouds/rsync/Curious
fi
count2=`find $hum -type f | wc -l`
if [ $count2 -eq 0 ];
then
:
else
find $hum -name '*.odt' -delete
rclone move $hum H-4:Clouds/rsync/Humour
fi
count3=`find $sm -type f | wc -l`
if [ $count3 -eq 0 ];
then
:
else
find $sm -name '*.odt' -delete
rclone move $sm H-4:Clouds/rsync/SA
fi
exit
Дополнительные команды1. Передача/получение данных с уничтожением каталогов Иногда требуется принудительно очищать Корзину, так как такие хранилища как Диск.Яндекс и MEGA при подсчётах доступного для записи места на облаке учитывают объём, который занимают удалённые данные, то есть помещённые в Корзину. Например:
В приведенной выше команде ydsa: соответствует хосту Диск.Яндекс, прописанному в конфигурации rclone.conf
Со своей стороны, хотелось бы низко в пояс поклониться разработчикам программного обеспечения rclone за столь замечательный программный продукт, который в значительной степени облегчил реализацию моих потребностей в решениях задач по резервированию нужной для меня информации на различные ресурсы облачного хранения данных.