【问题标题】:TarWriter help adding multiple directories and filesTarWriter 帮助添加多个目录和文件
【发布时间】:2021-09-04 09:45:23
【问题描述】:

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

问题:除了如何使上述示例使用多个路径(在链接的帖子中)之外,有人可以帮助解释如何将文件和目录添加到存档中吗? 我查看了目录结构/格式,但我似乎无法理解为什么这不适用于多个目录/文件。谢谢!

【问题讨论】:

    标签: ruby tar archive


    【解决方案1】:

    您可以为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
    

    【讨论】:

    • 感谢您的回答,对于迟到的回复非常抱歉。你的回答对继续尝试很有帮助和鼓舞人心,不幸的是,还有其他几件事需要调整才能让一切都按照我需要的方式工作(但你的代码可以按照你的方式工作)。问题之一是文件未写入正确的文件夹,因此需要修复相对路径,并且根目录中的文件也需要单独处理。我希望他们仍然可以奖励赏金,但我不知道它是否可以这样工作。标记为答案并点赞。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多