Ruby 1.9.0 リファレンスマニュアル > ライブラリ一覧 > library pathname > class Pathname > cleanpath

instance method Pathname#cleanpath

cleanpath(consider_symlink = false) -> Pathname

余計な "."、".." や "/" を取り除いた新しい Pathname オブジェクトを返します。

require "pathname"
path = Pathname.new("//.././../")
p path                  # => #<Pathname://.././../>
p path.cleanpath        # => #<Pathname:/>

consider_symlink が真ならパス要素にシンボリックリンクがあった場合 にも問題ないように .. を残します。

cleanpath は、実際にファイルシステムを参照することなく、文字列操作 だけで処理を行います。

require 'pathname'

Dir.rmdir("/tmp/foo")      rescue nil
File.unlink("/tmp/bar/foo") rescue nil
Dir.rmdir("/tmp/bar")      rescue nil

Dir.mkdir("/tmp/foo")
Dir.mkdir("/tmp/bar")
File.symlink("../foo", "/tmp/bar/foo")
path = Pathname.new("bar/././//foo/../bar")

Dir.chdir("/tmp")

p path.cleanpath
p path.cleanpath(true)

=> ruby 1.8.0 (2003-10-10) [i586-linux]
   #<Pathname:bar/bar>
   #<Pathname:bar/foo/../bar>