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