Я хочу прочитать содержимое одного файла из tar-файла .tar.gz. Файл находится в корневом каталоге tarball. Есть ли простой способ сделать это? Я думал о чем-то вроде data = Tarball.open('myfile.tar.gz').entry('/myentry').content
Есть ли такая вещь?Ruby: Прочтите один файл из tarball
ответ
Проблема в том, что .tar.gz
не является структурированным файлом; это всего лишь файл .tar
, который прошел через алгоритм сжатия, который ничего не знает о tar
. Таким образом, единственный способ вернуть данные из него - сначала разобрать все.
Как альтернатива с меньшим пространством, но более эффективная с точки зрения времени, вы можете рассмотреть возможность взлома tar-файла, повторного сжимания каждого файла по отдельности и последующего переноса их в архив (несжатый). Затем извлечение отдельных файлов легко с помощью жгута archive-tar
, и вы можете просто добавить шаг декомпрессии для восстановления оригиналов.
Проблема: у меня есть tarball, сделанный другим приложением, и я хочу извлечь метаданные, которые хранятся в одном файле внутри него - как можно быстрее , так как я выполняю пакетную обработку – Kilobyte
Отъезд [TarReader] (http://www.ruby-doc.org/stdlib-1.9.3/libdoc/rubygems/rdoc/Gem/Package/TarReader/Entry.html) – NorCalKnockOut
Я видел это, но на самом деле не узнал, как его использовать, проверит его, хотя – Kilobyte