我正在使用Grit(Ruby gem)加载一个git仓库,将一个给定的提交提取到一个文件夹,然后'做些什么'。 Grit支持使用archive_tar的git归档文件,该文件可以回退'包含tar归档文件的字符串'。如果可能的话,我想使用Ruby libs/gems将其解压缩到文件系统中(而不是直接系统调用),并避免将数据先保存到压缩文件然后解压缩(真的在这里寻找一个有效的单行程)。在Ruby中,如何将tar归档流直接提取到文件系统?
0
A
回答
2
在假设“包含tar归档字符串”等同于
File.open("Downloads.tar", "rb") {|a| a.read }
我能够做到这一点使用文件实用程序,StringIO的,和minitar宝石。 首先,你需要安装minitar,这应该是越简单
gem install minitar
由于minitar不支持它的定期拆开使用流,我们将创建我们自己的基本的拆包方法。
require 'archive/tar/minitar'
require 'stringio'
require 'fileutils'
def unpack_tar(directory, string)
FileUtils.mkdir_p(directory) if !File.exist?(directory)
stringio = StringIO.new(string)
input = Archive::Tar::Minitar::Input.new(stringio)
input.each {|entry|
input.extract_entry(directory, entry)
}
end
unpack_tar("./test", File.open("Downloads.tar", "rb") {|a| a.read })
当然替换与砂砾宝石的archive_tar
函数整个File.open一部分。这当然都假设了第一个假设,但我相信这个方法可以很容易地适应任何实际返回的情况。
+0
这很好用,例如'Grit :: Repo.new('repo_dir')。archive_tar('commit_id')'作为字符串。 –
相关问题
- 1. python tar文件如何将文件提取到流中
- 2. 删除从tar归档文件中提取的文件
- 3. tar文件归档不
- 4. 如何将文件追加到Java中的.tar归档文件中?
- 5. 提取存储在tar归档文件中的以前版本的文件
- 6. 如何使用Apache Commons Compress将文件追加到.tar归档文件中?
- 7. Golang:将文件追加到现有的tar归档文件
- 8. 使用php提取空目录的tar归档文件PharData
- 9. 将tar文件归档到Perl中的其他位置
- 10. 测试文件中tar归档
- 11. 提取链接描述归档文件
- 12. 将数据直接写入tar档案
- 13. 如何在Ruby中将URL映射到文件系统?
- 14. 提取tar文件
- 15. Ruby:创建一个Gzipped Tar归档文件
- 16. 如何在不创建子目录的情况下从tar归档文件中提取文件?
- 17. Hwo提取ZIP文件到tar在postgresql
- 18. Ruby流tar/gz
- 19. HP-UX - 如何从tar归档文件读取文本文件而不提取它?
- 20. 如何在Perl中提取tar文件到目标目录
- 21. 如何提取MPFS文件系统?
- 22. 如何从phpDocumentor直接提取文档到MySQL
- 23. 如何在Perl中提取压缩归档文件?
- 24. Autotools - tar这看起来不像一个tar归档文件
- 25. 如何创建不会展开到子文件夹的tar归档文件?
- 26. 如何直接将内容写入tar文件?
- 27. 如何使用compress/gzip和archive/tar创建压缩的tar归档文件?
- 28. 排除从tar归档文件目录中有.tarignore文件
- 29. 保存硬链接的Tar归档文件
- 30. perl tar文件提取
请显示您现在使用的代码。 –
我之前并没有真正的代码。我刚刚用Grit制作了一个tar文件,然后将tar作为系统命令调用。 –