37 lines
No EOL
1.1 KiB
Ruby
37 lines
No EOL
1.1 KiB
Ruby
require "fileutils"
|
|
|
|
module Archive
|
|
def self.cmd(*cmd)
|
|
puts "cmd: #{cmd.join(" ")}"
|
|
# return
|
|
stdout, stderr, status = Open3.capture3(*cmd)
|
|
unless status.success?
|
|
warn "Command failed: #{cmd.join(' ')}"
|
|
warn stderr
|
|
exit status.exitstatus || 1
|
|
end
|
|
stdout
|
|
end
|
|
|
|
# it preserved sparsiveness
|
|
# gtar -S --sparse-version=2 -I 'zstd -T0 -19' -cpf test.tar.zst /Volumes/Projs/VM/VM-data/image/debian-arm64/debian/
|
|
# tar --zstd -xpf test.tar.zst -C ./r
|
|
|
|
def self.create(path, **options)
|
|
out = options[:out] || File.join(Dir.pwd, "archive.tar.zst")
|
|
|
|
FileUtils.mkdir_p(File.dirname(out))
|
|
cmd "gtar", "-S", "--sparse-version=2", "-I",
|
|
"zstd -T0 -19", "-cpf", out, "-C" , path, "."
|
|
end
|
|
|
|
def self.restore(file, path, **options)
|
|
puts file
|
|
puts path
|
|
puts options
|
|
|
|
FileUtils.mkdir_p(path)
|
|
cmd "gtar", "-S", "--sparse-version=2", "-I", "zstd", "-xpf",
|
|
file, "-C", path
|
|
end
|
|
end |