def backup(*sources)
sources, opts = args_and_opts(*sources)
targets = []
for source in sources
is_dir = File.directory?(source)
tempster_opts = {
:verbose => false,
:noop => noop?,
:delete => false,
:dir => File.dirname(source),
:prefix => "%s.%s" % [File.basename(source), Time.now.to_i],
:suffix => ".bak",
:kind => is_dir ? :directory : :file,
}
target = ::Tempster.tempster(tempster_opts)
log.silence(opts[:quiet] ? Logger::WARN : log.level) do
if is_dir
cp_opts = {}
cp_opts[:recursive] = true if is_dir
cp_opts[:preserve] = :try
source_children = _directory_contents(source)
interpreter.cp_r(source_children, target, cp_opts)
else
interpreter.cp(source, target)
end
end
targets << target
end
return sources.size == 1 ? targets.first : targets
end