------ art_123_11983036.1190980655332 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Content-Disposition: inline 2007/9/28, Simon Mullis <simon / mullis.co.uk>: > > trying again.... > > ;-) > > SM > > ---------- Forwarded message ---------- > From: Simon Mullis <simon / mullis.co.uk> > Date: Sep 27, 2007 4:16 PM > Subject: minitar - how to extract only one file from a tar archive as an > object > To: ruby-talk / ruby-lang.org > > > 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 > > <code> > # lifted from the minitar source... > require 'archive/tar/minitar' > include Archive::Tar > > a ile.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 > </code> > > 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! > > -- > Simon Mullis > _________________ > simon / mullis.co.uk > > 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 ile.open("test.tar", "rb") Minitar::Input.open(a) do |inp| inp.each do |entry| if entry.full_name /baz/ f tringIO.new( entry.read) #Do something useful with f end end end Regards, Raf ------ art_123_11983036.1190980655332--