diff options
Diffstat (limited to 'dupfiles')
-rwxr-xr-x | dupfiles | 22 |
1 files changed, 19 insertions, 3 deletions
@@ -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) |