Kode untuk Backup Files and Folders di Python

By | January 15, 2021
1,336 Views

Sinopsis

Backup adalah langkah bijak untuk kondisi saat ini yang berbasis digital, tidak melakukan backup maka hilanglah sudah data mu, walaupun ada banyak aplikasi recovery seperti EASEUS yang bagus dan free (maksimal 5 kali sih) https://www.easeus.com/download/backup.html. Tapi biasakan saja untuk melakukan backup secara daily menggunakan hardisk yang berbeda-beda untuk jaga-jaga kalau flashdik mu ilang ditengah jalan. Saat ini ada banyak aplikasi yang sudah tersedia baik yang bersifat

  1. local/desktop seperti http://www.backupsoft.net/everydayautobackup.htm yang bisa penulis pakai saat ini
  2. ataupun cloud seperti dropbox.com, google drive
  3. menggunakan NAS storage. NAS adalah singkatan dari Network Attached Storage yaitu sebuah piranti penyimpanan data dengan sistem operasi yang dikhususkan untuk melayani kebutuhan backup dan share data. NAS dapat di akses langsung melalui jaringan dengan protokol seperti TCP/IP . NAS ini dilengkapi dengan tempat penyimpanan berupa harddisk, memiliki perangkat lunak sendiri untuk pengelolaan dan bertugas untuk menyimpan/backup serta men-share file dalam sebuah jaringan.

Khusus untuk point 3 bila kalian punya budget lebih akan menjadi opsi yang sangat baik karena bisa diakses seperti layaknya google drive namun itu milik kalian sendiri lho tentu bisa berisikan 1 TB lebih atau bahkan 25 TB bila kalian mau.

Ada opsi ke 4 yaitu kita bisa membuat script tersendiri menggunakan bahasa favorit yaitu python yang bertugas untuk Backup Files and Folders. Script ini  dibuat ketika penulis sedang mencari-cari aplikasi untuk melakukan backup otomatis di Windows, tapi agak kesulitan menemukan aplikasi yang langsung berjalan otomatis, oleh karena itu penulis menggunakan Python untuk mempermudah kerjaan tersebut. Cara kerja script untuk Backup Files and Folders di Python tersebut sangat sederhana sekali, algoritma nya sangat sederhana seperti berikut

  1. Folder_tujuan dan folder_asal masing-masing dibandingkan keberadaan subfolder  bila tidak ada maka create
  2. Kemudian setelah create folder maka cek masing-masing file, jika tidak ada langsung copy
  3. Jika masing-masing file ada, maka bandingkan informasi meta yaitu date modified nya
  4. jika file di folder_tujuan mempunyai date yang lebih lama, maka akan replace

Berikut hasil scriptnya diberikan informasi kepada user mengenai file dan folder nya

Proses Backup...................................
D:/backup/1.38 Bejo-harmony search//1.1 Review.docx --> ditambahkan
D:/backup/1.38 Bejo-harmony search//Algoritma Harmony Search.pdf --> ditambahkan
D:/backup/1.38 Bejo-harmony search//harmony search.html --> ditambahkan
D:/backup/1.38 Bejo-harmony search//HarmonySearch.m --> ditambahkan
D:/backup/1.38 Bejo-harmony search//HarmonySearch.zip --> ditambahkan
D:/backup/1.38 Bejo-harmony search//harmonysearchalgorithm-141106145524-conversion-gate01.pdf --> ditambahkan
D:/backup/1.38 Bejo-harmony search//Industri Pengolahan.xlsx --> ditambahkan
D:/backup/1.38 Bejo-harmony search//rahimikia2017.pdf --> ditambahkan
Buat folder D:/backup/1.38 Bejo-harmony search/harmony search_files/
D:/backup/1.38 Bejo-harmony search//harmony search_files/186030155234771.js --> ditambahkan
D:/backup/1.38 Bejo-harmony search//harmony search_files/a --> ditambahkan
D:/backup/1.38 Bejo-harmony search//harmony search_files/ahy.js --> ditambahkan
D:/backup/1.38 Bejo-harmony search//harmony search_files/anchor.js --> ditambahkan
D:/backup/1.38 Bejo-harmony search//harmony search_files/application.css --> ditambahkan
D:/backup/1.38 Bejo-harmony search//harmony search_files/application.js --> ditambahkan
D:/backup/1.38 Bejo-harmony search//harmony search_files/application_002.css --> ditambahkan
D:/backup/1.38 Bejo-harmony search//harmony search_files/application_002.js --> ditambahkan
D:/backup/1.38 Bejo-harmony search//harmony search_files/application_003.css --> ditambahkan
D:/backup/1.38 Bejo-harmony search//harmony search_files/aquant.js --> ditambahkan
D:/backup/1.38 Bejo-harmony search//harmony search_files/bootstrap.css --> ditambahkan
D:/backup/1.38 Bejo-harmony search//harmony search_files/bootstrap.js --> ditambahkan
D:/backup/1.38 Bejo-harmony search//harmony search_files/conversion.js --> ditambahkan
D:/backup/1.38 Bejo-harmony search//harmony search_files/dest5.html --> ditambahkan
D:/backup/1.38 Bejo-harmony search//harmony search_files/fbevents.js --> ditambahkan
D:/backup/1.38 Bejo-harmony search//harmony search_files/fileexchange.css --> ditambahkan
D:/backup/1.38 Bejo-harmony search//harmony search_files/global.js --> ditambahkan
D:/backup/1.38 Bejo-harmony search//harmony search_files/ico-facebook.svg --> ditambahkan
D:/backup/1.38 Bejo-harmony search//harmony search_files/ico-google-plus.svg --> ditambahkan
D:/backup/1.38 Bejo-harmony search//harmony search_files/ico-linkedin.svg --> ditambahkan
D:/backup/1.38 Bejo-harmony search//harmony search_files/ico-rss.svg --> ditambahkan
D:/backup/1.38 Bejo-harmony search//harmony search_files/ico-twitter.svg --> ditambahkan
D:/backup/1.38 Bejo-harmony search//harmony search_files/index.html --> ditambahkan
D:/backup/1.38 Bejo-harmony search//harmony search_files/jquery-latest.js --> ditambahkan
D:/backup/1.38 Bejo-harmony search//harmony search_files/jquery.js --> ditambahkan
D:/backup/1.38 Bejo-harmony search//harmony search_files/jquery_002.js --> ditambahkan
D:/backup/1.38 Bejo-harmony search//harmony search_files/lightbox-min.js --> ditambahkan
D:/backup/1.38 Bejo-harmony search//harmony search_files/mbox-contents-95c6a4d9c82a8d20476522984666120b54192e9b.js --> ditambahkan
D:/backup/1.38 Bejo-harmony search//harmony search_files/mlc.css --> ditambahkan
D:/backup/1.38 Bejo-harmony search//harmony search_files/mw_font.css --> ditambahkan
D:/backup/1.38 Bejo-harmony search//harmony search_files/no_screenshot.png --> ditambahkan
D:/backup/1.38 Bejo-harmony search//harmony search_files/pic-header-mathworks-logo.png --> ditambahkan
D:/backup/1.38 Bejo-harmony search//harmony search_files/pic-header-mathworks-logo.svg --> ditambahkan
D:/backup/1.38 Bejo-harmony search//harmony search_files/pic-header-mathworks-logo2.svg --> ditambahkan
D:/backup/1.38 Bejo-harmony search//harmony search_files/profilepic_default.gif --> ditambahkan
D:/backup/1.38 Bejo-harmony search//harmony search_files/s-code-contents-73da148cb454c4f6e395aa8df704854c99540662.js --> ditambahkan
D:/backup/1.38 Bejo-harmony search//harmony search_files/satellite-5480c4083639370018670600.js --> ditambahkan
D:/backup/1.38 Bejo-harmony search//harmony search_files/satelliteLib-e8d23c2e444abadc572df06537e2def59c01db09.js --> ditambahkan
D:/backup/1.38 Bejo-harmony search//harmony search_files/show.js --> ditambahkan
D:/backup/1.38 Bejo-harmony search//harmony search_files/site6.css --> ditambahkan
D:/backup/1.38 Bejo-harmony search//harmony search_files/site6_lg.css --> ditambahkan
D:/backup/1.38 Bejo-harmony search//harmony search_files/site6_md.css --> ditambahkan
D:/backup/1.38 Bejo-harmony search//harmony search_files/site6_print.css --> ditambahkan
D:/backup/1.38 Bejo-harmony search//harmony search_files/site6_sm.css --> ditambahkan
D:/backup/1.38 Bejo-harmony search//harmony search_files/site6_smxs.css --> ditambahkan
D:/backup/1.38 Bejo-harmony search//harmony search_files/site6_xs.css --> ditambahkan
D:/backup/1.38 Bejo-harmony search//harmony search_files/xvy5baa.js --> ditambahkan
Buat folder D:/backup/1.38 Bejo-harmony search/New folder/
===============================================================================
F:/1.38 Bejo-harmony search
Informasi :
Tambah : 55 File
Update : 0 File
Tetap : 0 File
Jumlah Folder : 2

Contoh kode yang digunakan yaitu

import os
import shutil
def parsing(a,b):
    a2 = a.split('/')
    b2 = b.split('/')
    c = b2[len(a2):len(b2)-1]
    h = ''
    for i in range(0,len(c)):
        h = h+'/'+c[i]
    return h
def cektanggal(f):
    if os.path.isfile(f)==False:
        return 0
    else :        
        return os.path.getmtime(f) #diubah ke float
def backup(folder_tujuan,folder_asal):      
    tambah = 0
    tetap = 0
    update = 0
    jumlah_folder = 0
    folder = folder_asal    
    daftar_folder = folder_asal.split('/')
    #ambil folder terakhir
    if os.path.exists(folder_tujuan+'/'+daftar_folder[len(daftar_folder)-1])==False:
        os.makedirs(folder_tujuan+'/'+daftar_folder[len(daftar_folder)-1])    
    folder_tujuan = folder_tujuan+'/'+daftar_folder[len(daftar_folder)-1]
    
    jumlah_folder = 0
    for foldername, subfolders, filenames in os.walk(folder):    
        foldername = foldername.replace('\\','/')
        daftar_folder_bawah = foldername.split('/')
        if len(daftar_folder_bawah)>len(daftar_folder):
            create_folder = daftar_folder_bawah[len(daftar_folder):len(daftar_folder_bawah)]
            b = ''                                    
            for a in create_folder:
                b = b+a+'/'
            if os.path.exists(folder_tujuan+'/'+b)==False:
                print ('Buat folder '+folder_tujuan+'/'+b)
                os.makedirs(folder_tujuan+'/'+b)
                pass        
            jumlah_folder = jumlah_folder+1
            pass
        for filename in filenames:
            
            croping = parsing(folder,foldername+'/'+filename)
            head, tail = os.path.split(filename)
            
            if os.path.isfile(folder_tujuan+'/'+croping+'/'+tail)==False:
                print (folder_tujuan+'/'+croping+'/'+tail+' --> ditambahkan')
                try     :
                    shutil.copy2(foldername+'/'+filename,folder_tujuan+'/'+croping+'/'+tail)#target_folder)
                    tambah = tambah+1
                except:
                    pass
            else :
                if cektanggal(foldername+'/'+filename)>cektanggal(folder_tujuan+'/'+croping+'/'+tail):
                    try:
                        shutil.copy2(foldername+'/'+filename,folder_tujuan+'/'+croping+'/'+tail)#target_folder)
                        print (folder_tujuan+'/'+croping+'/'+tail+' --> update')
                        update = update+1
                        pass                
                    except:
                        input('tekan enter untuk keluar....')
                        pass                
                    
                else:
                    print (foldername+'/'+filename+' --> tetap')
                    tetap = tetap+1
                    pass
    print ('===============================================================================')
    print (folder_asal)
    print ('Informasi :')
    print ('Tambah : '+str(tambah)+ ' File')
    print ('Update : '+str(update)+ ' File')
    print ('Tetap : '+str(tetap)+ ' File')
    print ('Jumlah Folder : '+str(jumlah_folder))
        

print ('Proses Backup...................................')
folder_tujuan = 'D:/backup'               
folder_asal = 'F:/1.38 Bejo-harmony search'
backup(folder_tujuan,folder_asal)

Backup Files and Folders di Python sangat mudah digunakan koq tinggal kalian bikin saja dalam aplikasi berbasis GUI di python menggunakan PySimpleGUI. ataupun berbasis CLI arg parser di python