我应该使用什么ruby gem来处理tar归档操作?

时间:2014-03-07 20:49:14

标签: ruby gzip tar

我需要下载tar.gz文件,并用其他tar.gz文件的内容替换其中的目录。到目前为止,我已经尝试了以下宝石,并发现它们缺乏

  • archive-tar2:它丢失了倒数第二个路径分隔符(“/”),因此无法实际提取
  • archive-tarsimple:根本没有提取压缩的tarball,并且没有返回错误消息msg
  • minitar:遇到一个错误,因为文件路径超过100个字符
  • archive-tar-minitar - 与其父Errno :: ENAMETOOLONG /文件名太长相同
  • libarchive:bundle install失败了gcc编译(即使在成功的brew install libarchive之后)

我开始失去信心。是否有一个好的,最新的,维护良好的tar存档宝石才有效?我更喜欢一个没有呼叫命令行的人,因为我想消除命令行注入攻击的可能性。但是在这一点上,我会采取任何避免手动调用shell的东西。

2 个答案:

答案 0 :(得分:0)

您还可以查看archive-tar-minitar,它部分基于您已经测试过的minitar,并且它似乎不会触发对命令行的调用。

答案 1 :(得分:0)

我最终放弃使用gem来操作tar档案,而只是通过炮轰命令行来完成它。

`cd #{container} && tar xvfz sdk.tar.gz`    
`cd #{container} && tar xvfz Wizard.tar.gz`

    #update the framework packaged with the wizard
    FileUtils.rm_rf(container + "/Wizard.app/Contents/Resources/SDK.bundle")
    FileUtils.rm_rf(container + "/Wizard.app/Contents/Resources/SDK.framework")
    FileUtils.mv(container +  "/resources/SDK.bundle", container + "/Wizard.app/Contents/Resources/")
    FileUtils.mv(container +  "/resources/SDK.framework", container + "/Wizard.app/Contents/Resources/")

    config_plist =  render_to_string({
             file: 'site/_wizard_config',
             layout: false,
             locals: { app_id: @version.app.id },
             formats: 'xml'
            })  

File.open(container + "/Wizard.app/Contents/Resources/Configuration.plist", 'w') { |file| file.write( config_plist ) } 

`cd #{container} && rm Wizard.tar.gz`    
`cd #{container} && tar -cvf Wizard.tar 'Wizard.app'`
`cd #{container} && gzip Wizard.tar`

所有这些反引号让我觉得我又在写Perl。

相关问题