Automatyczny backup moich projektów do Google Drive - Python

in #polish7 years ago

Automatyczny backup moich projektów do Google Drive


Backup do chmury bez zmiany umiejscowienia folderu


Ostatnio spotkałem się z problemem. Dla mnie dużym. Miałem folder z moimi projektami. W sumie około 20 000 plików, prawie 400 MB danych. Folderu nie mogę przenieść w inne miejsce ze względu na powiązania z różnymi programami, więc zmiana lokalizacji nie wchodzi w grę. A żeby wykonać backup na dysk googla trzeba wrzucić pliki do folderu Google Drive.

Wężu ratuj


No i wpadłem na sposób. Jaki? Programistyczny :) A zrobię sobie skrypt. W pythonie - w końcu to kombajn do wszystkiego. Tak więc musi on kopiować wszystkie pliki z jednego miejsca w drugie. Nie może jednak ciągle kopiować tych plików i zamieniać. Bez sensu byłoby to. Niech kopiuje je i zamienia tylko w momencie kiedy zostały zmodyfikowane.

A więc krótkie podsumowanie:

  • rób folder jeśli nie istnieje
  • kopiuj nowe pliki
  • kopiuj i zamieniaj zmodyfikowane pliki

Programowanie czas zacząć

Na początek weźmy wszystkie ścieżki katalogów z folderu, który chcemy skopiować i zróbmy te katalogi w miejscu docelowym jeśli nie istnieją.
        for src_dir in [x[0] for x in os.walk(src)]:
            if "\\" in src_dir:
                param, value = src_dir.split("\\",1)
                dest_dir = dst + "\\" + value
            else:
                dest_dir = dst + "\\"
            if not os.path.exists(dest_dir):
                print "creating new folder " + dest_dir
                os.makedirs(dest_dir)

Dobra. Wszystkie potrzebne foldery zrobione jeśli nie były.

Czas na wybranie wszystkich ścieżek plików.

result_src = [y for x in os.walk(src) for y in glob(os.path.join(x[0], '*'))]

A teraz jeśli jest to zmodyfikowany albo nowy plik to go kopiujemy. Reszty plików nie ruszamy, żeby nie kopiować bezsensownie istniejących już plików.

        for src_file in result_src:
            param, value = src_file.split("\\",1)
            dest_file = dst + "\\" + value
            if os.path.isfile(dest_file):
                if os.stat(src_file).st_mtime - os.stat(dest_file).st_mtime > 1:
                    print "coping modified file " + src_file
                    shutil.copy2(src_file, dest_file)
            else:
                if os.path.isfile(src_file):
                    print "coping new file " + src_file
                    shutil.copyfile(src_file, dest_file)

No to mamy to wszystko. W przypadku sprawdzania czy plik został zmodyfikowany, biorę ostatni czas edycji w sekundach i jeśli czas zmiany jest większy niż jedna sekunda to znaczy, że trzeba skopiować go. Skrypt wrzuciłem sobie na pulpit i mam tam folder Projects i Google Drive. Podałem po prostu ich ścieżki i wszystko ładnie działa.

Coin Marketplace

STEEM 0.19
TRX 0.15
JST 0.029
BTC 64143.39
ETH 2638.98
USDT 1.00
SBD 2.80