From 9f13139910f37898fdeb4b104db025c97e3f7980 Mon Sep 17 00:00:00 2001 From: Lars Wirzenius Date: Sun, 11 Mar 2012 10:34:56 +0000 Subject: Add --min-size and --max-size options --- NEWS | 5 +++++ dupfiles | 22 +++++++++++++++++++--- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/NEWS b/NEWS index 73d2b07..ef717ec 100644 --- a/NEWS +++ b/NEWS @@ -1,6 +1,11 @@ NEWS for dupfiles ================= +Version 5.5, released UNRELEASED +-------------------------------- + +* Add `--min-size` and `--max-size` options. + Version 5.4, released 2012-02-09 -------------------------------- diff --git a/dupfiles b/dupfiles index a4877d5..87862e8 100755 --- a/dupfiles +++ b/dupfiles @@ -79,9 +79,15 @@ class File(object): class DuplicateFileFinder(object): - def __init__(self, progress): + def __init__(self, progress, min_size, max_size): self.by_size = dict() self.progress = progress + self.min_size = min_size + self.max_size = max_size + + def size_ok(self, size): + return (self.min_size <= size <= self.max_size or + (size >= self.min_size and self.max_size == -1)) def collect(self, root): ts = ttystatus.TerminalStatus() @@ -98,7 +104,7 @@ class DuplicateFileFinder(object): st = os.lstat(pathname) if stat.S_ISREG(st.st_mode): t = (st.st_dev, st.st_ino, pathname) - if st.st_size in self.by_size: + if self.size_ok(st.st_size) and st.st_size in self.by_size: self.by_size[st.st_size].append(t) else: self.by_size[st.st_size] = [t] @@ -206,9 +212,19 @@ class Dupfiles(cliapp.Application): self.settings.boolean(['no-act', 'dry-run', 'pretend'], 'do not really remove, just report what would ' 'be removed') + self.settings.bytesize(['min-size'], + 'compare files at least SIZE in size', + metavar='SIZE') + self.settings.bytesize(['max-size'], + 'compare files at most SIZE in size ' + '(-1 for infinity)', + metavar='SIZE', + default=-1) def process_args(self, args): - dupfinder = DuplicateFileFinder(self.settings['progress']) + dupfinder = DuplicateFileFinder(self.settings['progress'], + self.settings['min-size'], + self.settings['max-size']) for dirname in sorted(args): dupfinder.collect(dirname) -- cgit v1.2.1