Synchronizacja z Google Drive w Linuxie

Cześć,

dokładnie to co jest w tytule wpisu było mi potrzebne kilka dni temu, a skoro problem ten rozwiązałem to warto go tu opisać, bo proces może być dla kogoś ciekawy.

Potrzebowałem zrobić na linuxie (dokładniej Fedora 27) synchronizację jednostronną folderu lokalnego z folderem na Google Drive. Jednostronną tzn każdy plik jaki pojawił się w folderze lokalnym miał automatycznie znaleźć się w chmurze.

Użyłem do tego narzędzia gdrive – konsolowy klient do googledrive’a.

Zaczynamy zabawę

Ściągnijmy pierw binarkę ze strony którą podałem wyżej i przenieśmy ją do trochę bardziej odpowiedniego folderu niż ‚Pobrane’. Nadajmy też prawa do wykonywania

sudo mv gdrive-linux-x64 /opt/gdrive-linux-x64
sudo chmod -x /opt/gdrive-linux-x64

Żeby łatwiej korzystać z tak uzyskanego programu zróbmy dowiązanie symboliczne do /usr/bin

sudo ln -s /opt/gdrive-linux-x64 /usr/bin/gdrive

daje to wygodę posiadania go w PATHie, tj nie trzeba od teraz podawać całej ścieżki do programu gdy chcę go wykonać tylko po prostu wpisuje „gdrive” i już ładnie można z tego korzystać.

Warto tu dodać że ściąganie gotowych binarek ze stron jest trochę nie bezpieczne.. Bo nigdy nie wiemy co w nich dokładnie jest. No ale tez nie popadajmy w paranoję.

Gdy mamy już program w PATHie to możemy się zalogować do Google Drive z CLI:

gdrive about

W wyniku tej komendy pojawi się link który należy kliknąć, wyrazić zgodę na dostęp tej aplikacji do chmury i kod który się pojawi po owej akceptacji dostępu – wkleić do konsoli.

No i po tym procesie można korzystać w konsoli z dysku google’a:

[[email protected] ~]$ gdrive about
User: Mateusz Mazurek, [email protected]
Used: 2.9 GB
Free: 13.2 GB
Total: 16.1 GB
Max upload size: 5.2 TB

Właściwa synchronizacja

Właściwa komenda do synchronizacji wygląda tak

gdrive sync upload /home/mmazurek/folder_zrodlowy/ fileId

małym problemem natomiast było dowiedzenie się czym jest „fileId” – tzn łatwo się domyśleć że to docelowy folder, ale skąd wziąć jego ID, poklikałem trochę po dysku Google, ale nie było w informacjach po prawej żadnego IDka.

Na szczęście gdrive umożliwia wylistowanie plików wraz z szukanym IDkiem

gdrive list

gdzie szukane ID jest pierwszą kolumną. Z ciekawostek to to ID jest też w linku jak udostępniamy coś – ale o tym dowiedziałem się już później.

Skoro mamy komendę to użyjmy cron’a (linuxowy harmonogram zadań) by zmusić system do kontrolnej synchronizacji. W tym celu wystarczy otworzyć plik

sudo nano /etc/cron.d/googledrive-sync

i zapisać tam

0 * * * * root /usr/bin/gdrive sync upload /home/mmazurek/folder_zrodlowy/ fileId >> /var/log/googlesync.log 2>&1

Co można przetłumaczyć jako „o każdej godzinie, której minuta jest zerem, każdego dnia, uruchom wskazany program i przekieruj całe jego wyjście do pliku w folderze /var/log” – czyli w godzinach 11:00, 12:00 itp

Plik logów zacznie zapełniać się podobnym wpisem:

Starting sync…
Collecting local and remote file information…
Found 38 local files and 38 remote files
Sync finished in 1.376734023s

I jeśli czytaliście wpis o otrzymaniu oprogramowania to wiecie że to słaba informacja, bo nawet daty nie ma a kolejne wywołania się zlewają ze sobą, napiszmy więc kawałek basha który opakuje to wywołanie:

#!/bin/bash
/usr/bin/date +%d-%m-%y/%H:%M:%S
/usr/bin/gdrive sync upload /home/mmazurek/folder_zrodlowy/ fileId
/usr/bin/echo -----

no i wystarczy zmienić wpis w cron’ie na:

0 * * * * root /opt/sync_gd.sh >> /var/log/googlesync.log 2>&1

uprzednio oczywiście zapisując ten kawałek basha w pliku /opt/sync_gd.sh i nadając mu prawa do wykonywania.

Teraz moje logi wyglądają tak:

09-02-19/17:00:01
Starting sync…
Collecting local and remote file information…
Found 38 local files and 38 remote files
Sync finished in 1.470085637s
-----
09-02-19/18:00:01
Starting sync…
Collecting local and remote file information…
Found 38 local files and 38 remote files
Sync finished in 1.368526734s
-----
09-02-19/19:00:01
Starting sync…
Collecting local and remote file information…
Found 38 local files and 38 remote files
Sync finished in 1.376734023s

Dzięki temu jestem w stanie zdebuggować ewentualnie co się zepsuło jeśli z jakiegoś powodu pliki przestaną się pojawiać w chmurze.

Dzięki za wizytę,
Mateusz Mazurek
Podziel się na:
    Facebook email PDF Wykop Twitter

Dodaj komentarz

avatar

This site uses Akismet to reduce spam. Learn how your comment data is processed.

  Subscribe  
Powiadom o