インストールしているアプリケーションのdiffをとる

そろそろ、環境をきれいにしようかなと思ったので、てきとーに書いた。

使いかた

  • 1回実行
    • 現在インストールしているアプリの名前が入ったファイルが生成される
    • (デフォルトでは「orignal_apls.list」
  • orignal_apls.listと今回のスクリプトを別の環境に持っていく
  • もう一度実行
    • 比較結果が表示される。

使用した結果*1

===new enviroment only=== #新しく追加したアプリ
gom
ipython
libgnome-desktop-2
libnautilus-extension1
libtotem-plparser1
totem-gstreamer
totem-mozilla
wmctrl
===orig enviroment only=== #もう消してしまったアプリ
uim-el
xbindkeys-config

コード

#!/usr/bin/ruby
$orig="orignal_apls.list"

module Apl_list_maker
  module_function

  def use_dpkg
    result=[]
    `dpkg -l`.each_line do |line|
      result << $1 if line =~ /^ii\s+(.+?)\s/
    end
    result
  end
  
  def make_orig_apllist filename=nil
    filename = filename || $orig
    puts "making #{filename}(orignal apl-list)"

    File.open(filename, "w") do |wf| 
      wf.puts use_dpkg
    end
  end
end

class Comparer
  include Apl_list_maker

  def initialize orig=nil
    @orig_list = File.read(orig || $orig).split("\n")
    @present_list =  use_dpkg
  end
  
  def intersection
    @intersection ||= @orig_list & @present_list
  end
  
  def present_only_apls
    @present_list - self.intersection
  end
    
  def orig_only_apls
    @orig_list - self.intersection
  end

  def outputs
    puts "===new enviroment only==="
    puts present_only_apls
    puts "===orig enviroment only==="
    puts orig_only_apls
  end
end

def runnable? file
  (File.exist? file)? true : false
end

#################Main###################
orig=ARGV[0] || $orig

if runnable? orig
  comparer = Comparer.new(orig)
  comparer.outputs
else
  Apl_list_maker.make_orig_apllist(orig)
  puts "change enviroment and try-again."
end

*1:それぞれの環境で出力結果は変わります><