magikku
Ruby bindings for libmagic(3)
There are other variations of this binding. This one was written to ensure all features of the library were bound correctly (including compiling and checking magic databases) as well as to ensure compatability on different ruby environments.
Magikku includes FFI bindings as well as native ruby bindings.
Synopsis
Here’s a basic example identifying file contents.
#!/usr/bin/env ruby
require 'rubygems'
require 'magikku'
puts "This file is: " << Magikku.file(__FILE__)
puts "Mime Type: " << Magikku.file(__FILE__, :flags => Magikku::Flags::MIME)
… or string contents…
#!/usr/bin/env ruby
require 'rubygems'
require 'magikku'
dat = STDIN.read
puts "Data is: " << Magikku.string(dat)
puts "Mime Type: " << Magikku.string(dat, :flags => Magikku::Flags::MIME)
Sometimes it’s better to initialize a single object to reuse for lots of files:
#!/usr/bin/env ruby
require 'rubygems'
require 'magikku'
def ident(magik, f)
magik.flags = Magikku::Flags::NONE
print "#{f} (#{magik.file(f)}) "
magik.flags = Magikku::Flags::MIME
puts magik.file(f)
if File.directory?(f)
Dir[File.join(f, "*")].each {|f2| ident(magik, f2) }
end
end
magik = Magikku.new
Dir["*"].each do |f|
ident(magik,f)
end
magik.close
Requirements
* libmagic - The dynamic library is generally installed when buliding from
source, but your system may have a package available.
http://www.darwinsys.com/file/
Optional:
* ruby-ffi - If you do not wish to compile the C bindings, or if you want to
develop magikku, you will need to have ruby-FFI available. But, this is not
needed for basic use under MRI (Matz Ruby Interpreter). http://github.com/ffi/ffi
Installation
As a gem:
(sudo)? gem install magikku
From github:
# !first ensure you have libmagic installed.
git clone http://github.com/emonti/magikku.git
cd magikku
rake compile
rake spec # to make sure everything works
Copyright
Copyright © 2011 Eric Monti. See LICENSE for details.