【问题标题】:how to split/rejoin the zip file using ruby如何使用 ruby​​ 拆分/重新加入 zip 文件
【发布时间】:2013-05-29 10:55:54
【问题描述】:

我是 Ruby 的新手。有什么方法可以拆分一个大的 zip 文件,然后再将拆分后的文件合并到一个大的 zip 文件中?

我可以看到带有拆分示例的链接,但在运行时可以看到错误(拆分对象错误) split sample link

谁能帮助我在 ruby​​ 中拆分/加入 zip 文件?

【问题讨论】:

    标签: ruby ruby-on-rails-3 rubygems rubyzip


    【解决方案1】:

    Zip::ZipFile.split 在最新的 ruby​​zip 版本 0.9.9 中不可用。它仅存在于源代码的最新 master 分支中。如果您正在寻找一种将大文件拆分成小部分并在以后加入它们的方法,或者更确切地说,您不依赖中间拆分结果,您可以尝试 Unix/Linux 的split。例如。您想使用 USB 驱动器复制小文件并将它们加入另一台计算机。

    # each file will contain 1048576 bytes
    # the file will be splitted into xaa, xab, xac...
    # You can add optional prefix to the end of the command
    split -b 1048576 large_input_file.zip
    
    # join them some where after
    cat x* >large_input_file.zip
    

    rubyzip gem 提供了一种从大型 zip 文件创建多部分 zip 文件的方法。您可以使用p7zipWinRAR 解压缩拆分的zip 文件部分。但是,奇怪的是unzip 不支持多部分 zip 文件。 unzip 的手册说,

    尚不支持多部分存档,除非与 zip 结合使用。 (所有部分必须按顺序连接在一起,然后必须在连接的存档上执行zip -F'' (for zip 2.x) orzip -FF''(对于zip 3.x),以便fix'' it. Also, zip 3.0 and later can combine multi-part (split) archives into a combined single-file archive usingzip -s-inarchive -O outarchive'' . 有关详细信息,请参阅 zip 3 手册页。)这肯定会在下一个主要版本中得到纠正。

    如果你想要这个,你可以克隆最新的 master 分支并使用那个 lib 来完成这项工作。

    $ git clone https://github.com/aussiegeek/rubyzip.git
    $ vim split.rb
    

    然后在你的 ruby​​ 文件“split.rb”中:

    $:.unshift './rubyzip/lib'
    
    require 'zip/zip'
    
    part_zip_count = Zip::ZipFile.split("large_zip_file.zip", 102400, false)
    puts "Zip file splitted in #{part_zip_count} parts"
    

    您可以查看docs for split

    【讨论】:

    • 需要 'C:\rubyzip\lib' 需要 'zip/zip' part_zip_count = Zip::ZipFile.split("C:\junk\AWS Tools.zip", 10240, false) puts " Zip 文件拆分为 #{part_zip_count} 部分“错误:C:\Users\Administrator>ruby c:\split.rb C:/opscode/chef/embedded/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb :36: 在 require': cannot load such file -- C:\rubyzip\lib (LoadError) from C:/opscode/chef/embedded/lib/ruby/site_ruby/1.9.1/rubygems/custom_r equire.rb:36:in require' 来自 c:/split.rb:1:in `
      '
    猜你喜欢
    • 1970-01-01
    • 2011-09-11
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多