我正在使用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作爲系統命令調用。 –