Metainformationen zur Seite
  •  

Backup von FTP mit python

Datum: 04.07.2019 Quelle: https://talhasariyuerek.com/python-ftp-backup-script/

#!/usr/bin/python3
#ToDo Ordner zippen
####################################################
hostname = ''
username = ''
password = ''
start_directory = '/bin/' #Bin damit Datein kleiner
backup_dir = './'
####################################################
 
import ftplib
import os
import datetime
import backupdir
 
 
def get_files_directories():
 
    dirlisting = []
 
    ftp_obj.retrlines('LIST',callback=dirlisting.append)
 
    files = []
    directories = []
 
    for l in dirlisting:
        lastspace = l.rindex(' ')
        file_name = l[lastspace+1:]
        if l[0] == 'd' and file_name != '.' and file_name != '..':
            directories.append(file_name)
        elif l[0] == '-':
            files.append(file_name)
 
    return files,directories
 
def backup_directory(local_dir,remote_dir):
    #Ins Backup Verzeichnis wechseln
    os.chdir(local_dir)
    try:
        ftp_obj.cwd(remote_dir)
 
        print('In directory '+remote_dir)
 
        files,directories = get_files_directories()
 
        for f in files:
            print('Backing up '+f)
            try:
                ftp_obj.retrbinary('RETR '+f, open(f, 'wb').write)
            except ftplib.error_perm:
                print('Skipping '+f+' due to permissions')
 
        for d in directories:
            newremote = remote_dir+d+'/'
            newlocal = local_dir+'/'+d
            os.mkdir(newlocal)
            print(newlocal)
            backup_directory(newlocal,newremote)
    except:
        print('Skipping '+remote_dir+' due to permissions!!!!!')
 
os.chdir(backup_dir) #Ins Verzeichnis Wechseln
datestring = str(datetime.date.today()) # Datum String anlegen
 
os.mkdir(datestring) # Ordner mit Datum erstellen
os.chdir(datestring)# in den Datumsordner wechseln
 
#FTP Objekt erstellen
ftp_obj = ftplib.FTP(host=hostname, user=username, passwd=password)
 
local_dir = os.getcwd() #Variable mit absolutem Pfad erstellen
remote_dir = start_directory# Pfad auf dem Webserver
backup_directory(local_dir,remote_dir)
 
ftp_obj.quit()
 
#Datei zippen
backupdir.backupDir2Zip(local_dir, datestring)
#!/usr/bin/python3
 
import os 
import zipfile
 
def backupDir2Zip(folder, zipname):
    #Eine Ebene tiefer für relpath
    os.chdir(folder)
    os.chdir("..")
    folder = os.path.relpath(folder)
    zipFilename = zipname + ".zip"
 
    print("Erstelle Zip Datei: " + zipFilename)
    backupfile=zipfile.ZipFile(zipFilename,  "w",  zipfile.ZIP_DEFLATED)
 
    #Ordner rekursiv durchgehe
    for ordner, unterordner, dateien in os.walk(folder):
        backupfile.write(ordner)
        for datei in dateien:
            backupfile.write(os.path.join(ordner, datei))
 
    backupfile.close
 
if __name__ == '__main__':
    backupDir2Zip("/home/user/Files/Proggen/python-space/pyBakFTP/2019-07-06/",  "test")