def cleanup (self, preserved):
global counter
counter+=1
+ src = os.path.abspath(os.path.basename(self.path()));
if self.options.destination:
dst = os.path.abspath(self.options.destination) + '/' + os.path.basename(self.path())
if self.options.verbose:
print "moving %s\n\tto %s"%(self.path(), dst)
if not self.options.dry_run:
- os.rename (self.path(), dst)
+ os.rename (src, dst)
else:
- if self.options.dry_run:
- print "Would cleanup %s"%(self.path())
+ if self.options.verbose:
+ print "Would cleanup %s"%(src)
print " (keeping %s)"%preserved.path()
- else:
- if self.options.verbose: print "unlink",self.path()
- os.unlink (self.path())
+ if not self.options.dry_run:
+ if self.options.verbose: print "unlink",src
+ os.unlink (src)
# all files in a given timeslot (either month or week)
class Group:
def __init__ (self, groupname):
self.groupname=groupname
self.files=[]
+ self.count = 0
def insert (self, file):
self.files.append(file)
def epilogue (self):
def keep_one (self):
for file in self.files[1:]:
file.cleanup(self.files[0])
+ self.count += 1
# all files with the same (prefix, suffix)
class Kind:
self.prefix=prefix
self.suffix=suffix
self.options=options
+ self.todelete = 0
+ self.oldest = None
+ self.newest = None
# will contain tuples (filename, datetime)
self.list = []
def add_file (self, dir, filename, datetime):
try:
self.list.append ( File (dir, filename, datetime, self.options) )
+ self.newest = datetime
+ if not self.oldest:
+ self.oldest = datetime
except FileIgnored: pass
except:
print 'could not append %s'%filename
for groupname in groupnames:
if self.options.extra_verbose: print 'GROUP',groupname
self.groups[groupname].keep_one()
+ self.todelete += self.groups[groupname].count
# keeps an index of all files found, index by (prefix, suffix), then sorted by time
class Index:
for filename in filenames:
(b,p,s,d) = parse_filename (filename)
if not b:
- print "Filename %s does not match - skipped"%filename
+ if self.options.verbose:
+ print "Filename %s does not match - skipped"%filename
continue
self.insert (dir, filename, p, s, d)
def cleanup (self):
- for kind in self.index.values(): kind.cleanup()
+ for kind in self.index.values():
+ kind.cleanup()
+
+ def summary (self):
+ print "%-30s%-10s%10s%25s%25s"%("Prefix","Suffix","Num (Del)","Oldest","Newest")
+ for kind in self.index.values():
+ print "%-30s%-10s%3s (%3s) %30s%30s"%(kind.prefix, kind.suffix, len(kind.list), kind.todelete, kind.oldest, kind.newest)
def handle_dir_pattern (index, dir, pattern):
try:
help="move to <destination> instead of removing the file")
parser.add_option ("-o","--offset",dest='offset',action='store',type='int',default=0,
help="pretend we run <offset> days in the future")
+ parser.add_option ("-s","--summary",dest='summary',action='store_true',default=False,
+ help="print a summary")
(options, args) = parser.parse_args()
if options.extra_verbose: options.verbose=True
try:
index.epilogue()
index.show()
index.cleanup()
- print 'Found %d entries to unlink'%counter
+ if (options.summary) :
+ index.summary()
+ if options.verbose:
+ print 'Found %d entries to unlink'%counter
if __name__ == '__main__':
main()