ファイルの一覧をみるためには、UNIX では ls 、MS-DOS では dir コマンドを用いる。 このとき、コマンドの引数に * や ? といったワイルドカードを使って、 パターンにマッチするファイル名を絞ることが多い。 Dir クラスで提供されている Dir.glob メソッドでは、 このようなパターンにマッチするファイルを得ることができる。
このメソッドは「たのしい Ruby 」の294頁で知った。 早速このメソッドを使って、自分の問題を解決してみようとした。問題は次の通りである。
私のローカルのコンピュータには、自分のホームページのバックアップがある。 バックアップファイルのオリジナルの拡張子は .html.ja であるが、 また同じ内容で .html のみのファイルも同時に保存している。さてあるとき、 なぜか .html しかなく、オリジナルの .html.ja がないファイルがあることに気づいた。 そこで、Dir.glob を使ってこれらの一覧を出せればよいと考えた。スクリプトは次のとおりである。
def traverse(path)
Dir.glob("#{path}/**/*.html").each{ |name|
unless FileTest.directory?(name)
process_file(name)
end
}
end
def process_file(path)
puts path unless FileTest.exist?("#{path}.ja")
end
traverse(ARGV[0])
実行結果は次のとおりだった。TTT というのはエスペラントで WWW のことを指し、 バックアップをここに入れている。
C:\>glob.rb c:/TTT/www.asahi-net.or.jp/@7Eub2s-mrym c:/TTT/www.asahi-net.or.jp/@7Eub2s-mrym/taglibroj/1998/1998-04.html c:/TTT/www.asahi-net.or.jp/@7Eub2s-mrym/perl/dato.html c:/TTT/www.asahi-net.or.jp/@7Eub2s-mrym/unikso/unixuser2003-04.html c:/TTT/www.asahi-net.or.jp/@7Eub2s-mrym/c/cmaga1994-03.html c:/TTT/www.asahi-net.or.jp/@7Eub2s-mrym/ruby/komento.html c:/TTT/www.asahi-net.or.jp/@7Eub2s-mrym/ruby/metodo.html c:/TTT/www.asahi-net.or.jp/@7Eub2s-mrym/ruby/valorizo.html c:/TTT/www.asahi-net.or.jp/@7Eub2s-mrym/ruby/iteracioj.html c:/TTT/www.asahi-net.or.jp/@7Eub2s-mrym/ruby/funkcioj.html c:/TTT/www.asahi-net.or.jp/@7Eub2s-mrym/ruby/matematiko.html
どういうわけか、ほとんどが ruby の下にあるファイルだった。
まりんきょ学問所 > Ruby の浮き輪 > Dir.glob の使い方