Repost: minitar - how to extract only one file from a tar archive as an object

trying again…

:wink:

SM

---------- Forwarded message ----------
From: Simon M. [email protected]
Date: Sep 27, 2007 4:16 PM
Subject: minitar - how to extract only one file from a tar archive as an
object
To: [email protected]

Ahoy there, fellow rubyphiles…

I’m trying to use Archive::Tar::Minitar to extract a single file from
a tar archive:

“test.tar” contains:

./test/foo
./test/bar
./test/baz

# lifted from the minitar source... require 'archive/tar/minitar' include Archive::Tar

a = File.open(“test.tar”, “rb”)
Minitar::Input.open(a) do |inp|
inp.each do |entry|
inp.extract_entry(“.”, entry) if entry.full_name =~ /baz/
end
end

This all works fine, and writes to “./test/baz”

But!

How could I do the same and create a File object of the extracted
file? (i.e. not write anything to disk).

(The reason I ask is the file I want is a zip, which lives inside the
tar archive and I then want to grab some files from that using the
‘rubyzip’ gem.)

It’s quite possible (in fact, more than likely) that I’ve missed
something obvious and there is already a straightforward way to do
this.

To be honest, a few more examples of minitar in use would be great.

Many thanks in advance for any pointers or tips.

Cheers!

2007/9/28, Simon M. [email protected]:

Subject: minitar - how to extract only one file from a tar archive as an

Minitar::Input.open(a) do |inp|
How could I do the same and create a File object of the extracted
To be honest, a few more examples of minitar in use would be great.

Hi,

Use entry.read instead of inp.extract_entry; this will not extract the
file
to disk, but returns its contents as a string. And if wanted, you can
wrap
that string in a StringIO to get a file-like object:

require ‘archive/tar/minitar’
include Archive::Tar

require ‘stringio’

a = File.open(“test.tar”, “rb”)
Minitar::Input.open(a) do |inp|
inp.each do |entry|
if entry.full_name =~ /baz/
f = StringIO.new( entry.read)
#Do something useful with f
end
end
end

Regards,
Raf

Great! This is exactly what I was looking for!

Thankyou.

SM

Hi

Anyone have any examples of using rubyzip with a stringio object of a
zip (that I’ve just extracted from elsewhere using Minitar)…

I cannot seem to force it to accept a non-File object.

Anyone offer any inspiration?

Thanks

SM