duperemoverb/bin/duperemoverb

52 lines
1.4 KiB
Ruby
Executable File

#!/usr/bin/env ruby
# vim: set noet sw=2 ts=2 sts=2:
require 'dencli'
require 'duperemoverb'
require 'ostruct'
require 'logger'
$logger = Logger.new STDERR
$logger.formatter =
proc do |severity, datetime, progname, message|
sprintf "%s %s %s\n", datetime.strftime( '%H:%M:%S.%6N'), severity[0], message
end
begin
cli = DenCli.new File.basename($0), <<EOF
Deduplicates extents, which were already registered by `duperemove`.
This tool does not provide scanning, yet.
If PATHx given, only extents of files which matches this pattern and equal extents will be deduplicated. So, non-equal extents of not listed paths will be ignored.
EOF
cli.cmd :help, '(Help)', aliases: [nil, '-h', '--help'], &lambda {|cmd=nil|
STDERR.puts cli.help(cmd)
exit 1
}
cli.cmd( :dedupe, 'deduplicates files', &lambda {|db, *dirs, tempdb: nil|
dbfile = Pathname.new db
raise DenCli::UsageError, "Argument 0: Database missing: #{dbfile}" unless dbfile.exist?
tempdb ||= Pathname.new("/run/user/#{Process.uid}").join dbfile.basename
dr = Duperemove.new dbfile, tempdb
dr.run dirs
dr.finish
}).opt( :tempdb, '--tempdb=FILE', '-t', "Use given [empty] database as temporary database. (default in /run/user/...)")
cli.call *ARGV
rescue DenCli::UsageError
$logger.fatal "#$!"
rescue SystemExit
raise
rescue Interrupt
$logger.info "was interrupted"
exit 1
rescue
$logger.fatal "#$! (#{$!.class})\n#{$!.backtrace.join "\n\t"}"
end