52 lines
1.4 KiB
Plaintext
52 lines
1.4 KiB
Plaintext
|
#!/usr/bin/env ruby
|
||
|
# vim: set noet sw=2 ts=2 sts=2:
|
||
|
|
||
|
require 'dencli'
|
||
|
require 'deduperemoverb'
|
||
|
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
|