Статья описывает актуальный способ работы с гугл диском из командной строки (Linux), а также добавление ежедневной задачи для бэкапа и синхронизации локальных файлов с удалёнными директориями.
Для работы с гугл диском из командной строки потребуется установить Google Drive CLI Client (можно скачать готовый бинарник, а можно и заморочиться со сборкой из исходников): https://github.com/prasmussen/gdrive.
Во время первого запуска утилиты нужно будет авторизовать приложение в гугл аккаунте.
Скрипт на bash
Для скрипта нужно заполнить переменные REMOTE_DIR_ID
для директорий на диске. Эти значения можно получить командой gdrive list
. Немного больше про команды в предыдущей версии статьи: Бэкап на Google Диск из командной строки.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | #!/bin/bash BACKUP_DIR=/path/to/dir/for/backup # Compress BACKUP_DIR and upload to the Google Drive function upload_compressed { REMOTE_DIR_ID= BACKUP_PREFIX=stats COMPRESSED_FILE="/tmp/${BACKUP_PREFIX}-$(date +%Y-%m-%d-%H-%M-%S).zip" cd "$1" zip -r "$COMPRESSED_FILE" . -x "backup/*" echo "Uploading $COMPRESSED_FILE..." gdrive upload -p $REMOTE_DIR_ID $COMPRESSED_FILE } # Sync BACKUP_DIR with the remote dir on the Google Drive function sync_dir { REMOTE_DIR_ID= gdrive sync upload $1 $REMOTE_DIR_ID } # Run backup and syncing upload_compressed $BACKUP_DIR sync_dir $BACKUP_DIR |
Функция upload_compressed
сжимает указанную директорию (BACKUP_DIR
) и заливает на гуглдиск.
Функция sync_dir
синхронизирует локальную директорию с удалённой.
Актуальная версия скрипта лежит в моём репозитории с другими полезными сниппетами (поставьте звёздочку, расскажите друзьям, друзья).
Добавить автобэкап в ежедневные задачи
Скрипт удобно добавить в anacrontab, чтобы выполнять бэкап гарантированно раз в день (или любой другой период), независимо от времени, как это делает обычный крон. Так как приложение требует авторизации, это требует нескольких дополнительных движений.
1. Добавить задачу:
1 2 3 4 5 6 7 8 | sudo vim /etc/anacrontab # Добавить строку: каждый день (1), # 5 минут задержка после старта системы (5), # ID задачи (google-drive-backup), # писать лог выполнения в /tmp/last-cron-job.log 1 5 google-drive-backup /home/user/bin/google-drive-backup.sh >> /tmp/last-cron-job.log |
2. Форсировать выполнение задач:
1 | sudo anacron -df |
Скрипт упадёт с ошибками в логе, среди которых нужно скопировать запрошенный URL, вставить в браузер и получить код для авторизации.
3. Код сохраняем в файл /tmp/code
, который подсунем скрипту:
1 | 1 5 google-drive-backup /home/user/bin/google-drive-backup.sh < "/tmp/code" >> /tmp/last-cron-job.log |
4. Выполняем anacron -df
ещё раз.
5. Проверяем в логе, что ошибок нет, а на гуглдиске появился архив с бэкапом. После строку нужно вернуть в первоначальный вид, чтобы скрипт не упал, когда директория tmp
будет очищена.
cron
При желании, можно добавить задачу в классический крон:
1 2 | # Каждый день в 23:30 30 23 * * 0-6 /home/user/bin/google-drive-backup.sh > /tmp/last-cron-job.log |
Удобный генератор для крона, для тех, кто как и я, постоянно забывает синтаксис: https://crontab-generator.org/
Скорее всего, придётся проделать те же действия с кодом авторизации, что и для anacron
.