Dir.glob の使い方

作成日 : 2005-08-20
最終更新日 :

ワイルドカード

ファイルの一覧をみるためには、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 の使い方


MARUYAMA Satosi