プログラム内からrequire可能なライブラリの一覧を表示する を読んだのですが、UNIXのfind
コマンドを使っているので、Windowsでも使えるようPure Rubyで書けないかと思ってやってみました。
ついでに一応.rbだけでなく.soも検索するようにしています。
puts $:.flat_map {|path|
Dir.glob(File.expand_path("**/*.{rb,so}", path))
}
find
を使うパターンと結果を比べてみます。find
は-oオプションでOR検索できます。順番を揃えるため両方の結果をソートしています。
$ ruby -e 'puts $:.flat_map {|path| Dir.glob(File.expand_path("**/*.{rb,so}", path))}.sort' >ruby-search
$ find `ruby -e 'print $:*" "'` -type f -name "*.rb" -o -name "*.so" | sort >find-search
$ diff -s ruby-search find-search
ファイル ruby-search と find-search は同一です