get todays files

Andrew Doades andrew at doadesweb.co.uk
Thu Dec 11 12:48:08 EST 2008


Tim Chase wrote:
>> This looks very good and I have tested successfully, but is there a
>> way I can set the today to automatically become todays date in that
>> format?
>
> Yes...see the python datetime module[1]...particularly the strftime() 
> call on date/datetime objects.
>
> -tkc
>
> [1]
> http://docs.python.org/library/datetime.html

I know this will sound like I am being very cheeky, but is there a way 
you can make this for where the ftp server is actually windows server?

The script runs and it shows the date the file was modified, but still 
downloads them, I have attached the script I am now using with your code in.


import os
from ftplib import FTP
import subprocess
from datetime import datetime
from time import gmtime, strftime

curr_date = strftime("%d %B %Y", gmtime())
 
# config
ftp_uname = ''
ftp_pwd = ''
ftp_server = ''
# end of config
 
fileroot = 'DBBackup_'
os.chdir('c:/')
files = []     
 
logfile = open('c:/dbbackup/getmdbackups.log','a+')
 
def makelist(line):
    if (line.startswith(fileroot)):
        fs = [line]  
        files.append(fs)
 
def log(line):
    ll = str(datetime.now()) + ' : ' + str(line)
    print ll
    logfile.write(ll + '\n')
 
def fileexists(ff, size):
    if (os.path.exists(ff)):
        stat = os.stat(ff)
        if (stat.st_size == size):
            return True
    return False
 
try:
    # first connect using ftp to get a list of valid backup failes available
    log('Connecting to ftp server')
    ftp = FTP(ftp_server)
    ftp.set_pasv(False)
    #ftp.set_debuglevel(2)
    resp = ftp.login(ftp_uname,ftp_pwd)
    log(resp)
    ftp.retrlines('NLST',makelist)
    log(str(files))
    ftp.quit()
   
    # fetch files in a loop using wget.
    for ff in files:
        ftp = FTP(ftp_server)
        ftp.set_pasv(False)
        resp = ftp.login(ftp_uname,ftp_pwd)
        log(resp)
        size = ftp.size(ff[0])
        log('Size of server file = ' + str(size))
        #ftp.quit()
        try:
            if (not fileexists(ff[0],size)):
            results = ftp.sendcmd("MDTM %s" % ff[0])
        code, stamp = results.split(None, 1)
        assert code == "213", "Unexpected result"
        print "%s was modified on %s" % (ff[0], stamp)
        today = curr_date
        if stamp[:8] == today:
                    log('Transferring: ' + ff[0])
                # make parameters to wget the backup file
                params = ' ftp://' + ftp_server + '/' + ff[0]
                rcode = subprocess.call('c:/wget.exe ' + params)
                log('Return code from wget = ' + str(rcode))
                if (rcode == 0):
             ff[1] = 1
       
            else:
                log('File ' + ff[0] + ' already exists locally, not 
transferring')
                ff[1] = 1
 
        except Exception, e:
          log(str(e))
           
    log('Transfer complete')
    # delete the server files that have been transferred or are already 
here with the right filesize.
    for ff in files:
        if (ff[1] == 1):
            log('delete ' + ff[0])
except Exception,e:
    log(str(e))
# clean up temp files
log('Finished.')
logfile.close()



More information about the Python-list mailing list