summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLars Wirzenius <liw@liw.fi>2012-03-11 10:34:56 +0000
committerLars Wirzenius <liw@liw.fi>2012-03-11 10:34:56 +0000
commit9f13139910f37898fdeb4b104db025c97e3f7980 (patch)
treedcc2f38173d848bd7e9f665ffc60933c22f52507
parent28a96fe9bdef425772049c8a0b29f6a98e64538d (diff)
downloaddupfiles-9f13139910f37898fdeb4b104db025c97e3f7980.tar.gz
Add --min-size and --max-size options
-rw-r--r--NEWS5
-rwxr-xr-xdupfiles22
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)