![]() |
Hello, Since i had a need to archive faxes in folders by date i have created a python script that will do just that. Here it is.
It will take the faxes from the folder and create ./archive folder, and under that it will create 2007-2-20 2007-2-21 etc...depending on the date modified of file
usage: python archive.py /var/spool/hylafax/recvq tif or python archive.py /home/dept1/faxes pdf
any folder will do, any extension will do. I'm attaching it in the email or you can download it at a link below:
Enjoy Lucas
"""Lukasz Szybalski, szybalski@xxxxxxxxx, 2-22-2007. This program sorts files and puts them in folder archives/ by date it was modified on. Please provide a folder on a command line, and file extension. Example: python archive.py /department2/faxes tif""" import os import datetime import sys import shutil debuglevel=0 #Get folder name and extension if not specified on the commend line. def getfolder(): """This function asks you for the folder and file extension when programs is called using import archives command""" folder=raw_input("Please provide a folder: ") extension=raw_input("Please provide a extension: ") #See if folder was provided try: folder extension except NameError: print 'No folder or extension specified' print '\nExample:\npython archive /department1/faxes pdf' return(folder,extension) #Create a folder inside of an archive folder def createfolder(foldername): """This function creates a folder inside of the archive folder""" #Check if Archive folder exists datefolder=os.path.join(folder,'archives/'+foldername) if not os.path.exists(os.path.join(folder,datefolder)): os.mkdir(os.path.join(folder,datefolder)) if debuglevel > 0: print >>sys.stderr, 'Creating Archive Folder in: '+str(folder) #---------------------------------------------------------------------------------------------------- #call this function to check if program was imported or called on a comand line if not __name__=="__main__": (folder,extension)=getfolder() else: #See if folder was provided try: folder=sys.argv[1] extension=sys.argv[2] except IndexError: print 'No folder or extension specified' print '\nExample:\npython archive.py /department1/faxes tif' sys.exit(1) #See if folder exists if os.path.exists(folder): if debuglevel > 0: print >>sys.stderr, 'Found Folder: '+str(folder) else: if debuglevel > 0: print >>sys.stderr, 'Folder not Folder: '+folder sys.exit(1) #Check if Archive folder exists if not os.path.exists(os.path.join(folder,'archives/')): os.mkdir(os.path.join(folder,'archives')) if debuglevel > 0: print >>sys.stderr, 'Creating Archive Folder in: '+str(folder) #Global name for archive folder archivefolder=os.path.join(folder,'archives') #Get file names in folder filesinfolder=os.listdir(folder) if debuglevel > 0: print >>sys.stderr, 'Found: '+str(len(filesinfolder))+' files' #Create a dictionary with a list of date and filenames with that date. dateandfile={} #Go through files, get a date, and create a folder for each date for file in filesinfolder: if file[-len(extension):]==extension: filetime=os.stat(os.path.join(folder,file)).st_ctime filedate=datetime.date.fromtimestamp(filetime) dateandfile[str(filedate)]=[] for folderfound in dateandfile: createfolder(folderfound) #Go through files, get a date and append filename to a dictionary dateandfile for file in filesinfolder: if file[-len(extension):]==extension: filetime=os.stat(os.path.join(folder,file)).st_ctime filedate=datetime.date.fromtimestamp(filetime) if debuglevel > 1: print >>sys.stderr, 'Found Date: '+ str(filedate)+' '+ str(file) dateandfile[str(filedate)].append(file) #For each date in the dateandfile dictionary. Go over file names and move each and every one of them to appropriate folders. for date in dateandfile: folderto=os.path.join(archivefolder,date) for file in dateandfile[date]: shutil.move(os.path.join(folder,file),os.path.join(folderto,file)) if debuglevel > 1: print >>sys.stderr, 'Moving: ' + os.path.join(folder,file) +' to :'+ os.path.join(folderto,file) #done. setup this file as a cron job every night at 12:01 am. Enjoy