TarWriter 帮助添加多个目录和文件

TarWriter help adding multiple directories and files

this question 中的代码有效,但仅适用于单个目录。我也可以让它输出一个文件存档。但不能同时是文件和目录,或两个目录。我希望让它与路径列表一起工作,包括都放在同一个存档中的目录和文件。如果我尝试添加多个路径,tar 文件就会损坏。我以为我可以继续添加 files/data 来存档,只要 TarWriter 对象是打开的。

问题:除了 如何让上面的示例与多个路径一起工作(在链接 post 中),有人可以帮助 解释如何将文件和目录添加到存档中? 我查看了目录 structure/format,但我似乎无法理解为什么这对多个目录不起作用 directory/file.谢谢!

您可以向 Dir 对象添加多个路径

Dir[File.join(path1, '**/*'), File.join(path2, '**/*')]

之后的代码将是这样的:

BLOCKSIZE_TO_READ = 1024 * 1000

def create_tarball(path)

  tar_filename = Pathname.new(path).realpath.to_path + '.tar'

  File.open(tar_filename, 'wb') do |tarfile|

    Gem::Package::TarWriter.new(tarfile) do |tar|

      Dir[File.join(path1, '**/*'), File.join(path2, '**/*')].each do |file|

        mode = File.stat(file).mode
        relative_file = file.sub(/^#{ Regexp.escape(path) }\/?/, '')

        if File.directory?(file)
          tar.mkdir(relative_file, mode)
        else

          tar.add_file(relative_file, mode) do |tf|
            File.open(file, 'rb') do |f|
              while buffer = f.read(BLOCKSIZE_TO_READ)
                tf.write buffer
              end
            end
          end

        end
      end
    end
  end

  tar_filename

end