Ruby 1.9.2 リファレンスマニュアル > ライブラリ一覧 > pathnameライブラリ > Pathnameクラス

class Pathname

クラスの継承リスト: Pathname < Object < Kernel < BasicObject

Abstract

パス名クラス

特異メソッド

getwd -> Pathname
pwd -> Pathname

カレントディレクトリを元に Pathname オブジェクトを生成します。 Pathname.new(Dir.getwd) と同じです。

glob(pattern, flags=0) -> [Pathname]
glob(pattern, flags=0) {|pathname| ...} -> nil

ワイルドカードの展開を行なった結果を、 Pathname オブジェクトの配列として返します。

引数の意味は、Dir.glob と同じです。 flag の初期値である 0 は「何 も指定しない」ことを意味します。

ブロックが与えられたときは、ワイルドカードにマッチした Pathname オブジェ クトを1つずつ引数としてそのブロックに与えて実行させます。この場合、値と しては nil を返します。

[PARAM] pattern:
ワイルドカードパターンです
[PARAM] flag:
パターンマッチ時のふるまいを変化させるフラグを指定します
new(path) -> Pathname

文字列 path を元に Pathname オブジェクトを生成します。

インスタンスメソッド

self + other -> Pathname

パス名を連結します。つまり、other を self からの相対パスとした新しい Pathname オブジェクトを生成して返します。

other が絶対パスなら単に other と同じ内容の Pathname オブジェクトが返さ れます。

[PARAM] other:
文字列か Pathname オブジェクトを指定します。
self <=> other -> bool

パス名を比較します。other と同じなら 0 を、ASCII順で self が大きい場合 は正、other が大きい場合は負を返します。大文字小文字は区別されます。 other は Pathname オブジェクトでなければなりません。

パス名の比較は単純にパス文字列の比較によって行われるので、論理的に 同じパスでもパス文字列が違えば異なると判断されます。

require 'pathname'

p Pathname.new("foo/bar") <=> Pathname.new("foo/bar")
p Pathname.new("foo/bar") <=> Pathname.new("foo//bar")
p Pathname.new("foo/../foo/bar") <=> Pathname.new("foo/bar")
=> 0
   1
   -1
self == other -> bool
self === other -> bool
eql?(other) -> bool

パス名を比較し、 other と同じなら真を返します。大文字小文字は区別されます。 other は Pathname オブジェクトでなければなりません。

パス名の比較は単純にパス文字列の比較によって行われるので、論理的に 同じパスでもパス文字列が違えば異なると判断されます。

require 'pathname'

p Pathname.new("foo/bar") == Pathname.new("foo/bar")
p Pathname.new("foo/bar") == Pathname.new("foo//bar")
p Pathname.new("foo/../foo/bar") == Pathname.new("foo/bar")

# => true
     false
     false
absolute? -> bool

self が絶対パス指定であれば真を返します。

ascend { |pathname| ... }

self のパス名から親方向に辿っていったときの各パス名を新しい Pathname オ ブジェクトとして生成し、ブロックへの引数として渡して実行します。

Pathname.new('/path/to/some/file.rb').ascend {|v| p v}
   #<Pathname:/path/to/some/file.rb>
   #<Pathname:/path/to/some>
   #<Pathname:/path/to>
   #<Pathname:/path>
   #<Pathname:/>

Pathname.new('path/to/some/file.rb').ascend {|v| p v}
   #<Pathname:path/to/some/file.rb>
   #<Pathname:path/to/some>
   #<Pathname:path/to>
   #<Pathname:path>

ファイルシステムにはアクセスしません。

atime

File.atime(self.to_s) を渡したものと同じです。

[SEE_ALSO] File.atime

basename(*args)

Pathname.new(File.basename(self.to_s, *args)) と同じです。

[SEE_ALSO] File.basename

binread(*args)

IO.binread(self.to_s, *args)と同じです。

[SEE_ALSO] IO.binread

blockdev?

FileTest.blockdev?(self.to_s) と同じです。

[SEE_ALSO] FileTest.#blockdev?

chardev?

FileTest.chardev?(self.to_s) と同じです。

[SEE_ALSO] FileTest.#chardev?

children -> [Pathname]

self 配下にあるパス名(Pathnameオブジェクト)の配列を返します。

require 'pathname'

p Pathname.new("/tmp").children
=> ruby 1.8.0 (2003-10-10) [i586-linux]
   [#<Pathname:.X11-unix>, #<Pathname:.iroha_unix>, ... ]

ただし、 ".", ".." は要素に含まれません。

self が存在しないパスであったりディレクトリでなければ例外 Errno::EXXX が発生します。

chmod(mode)

File.chmod(mode, self.to_s) と同じです。

[SEE_ALSO] File.chmod

chown(owner, group)

File.chown(owner, group, self.to_s) と同じです。

[SEE_ALSO] File.chown

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>
ctime

File.ctime(self.to_s) を渡したものと同じです。

[SEE_ALSO] File.ctime

unlink
delete

self が指すディレクトリあるいはファイルを削除します。

descend { |pathname| ... }

self のパス名の親から子供へと辿っていったときの各パス名を新しい Pathname オブジェクトとして生成し、ブロックへの引数として渡して実行しま す。

Pathname.new('/path/to/some/file.rb').descend {|v| p v}
   #<Pathname:/>
   #<Pathname:/path>
   #<Pathname:/path/to>
   #<Pathname:/path/to/some>
   #<Pathname:/path/to/some/file.rb>

Pathname.new('path/to/some/file.rb').descend {|v| p v}
   #<Pathname:path>
   #<Pathname:path/to>
   #<Pathname:path/to/some>
   #<Pathname:path/to/some/file.rb>

ファイルシステムにはアクセスしません。

directory?

FileTest.directory?(self.to_s) と同じです。

[SEE_ALSO] FileTest.#directory?

dirname

Pathname.new(File.dirname(self.to_s)) と同じです。

[SEE_ALSO] File.dirname

each_child(with_directory=true) -> Enumerator
each_child(with_directory=true) {|pathname| ...} -> [Pathname]

self.children(with_directory).each とほぼ同じです。

[SEE_ALSO] Pathname#children

each_entry {|pathname| ... }

Dir.foreach(self.to_s) {|f| yield Pathname.new(f) } と同じです。

[SEE_ALSO] Dir.foreach

each_filename {|v| ... } -> nil

self のパス名要素毎にブロックを実行します。

require 'pathname'

Pathname.new("/foo/../bar").each_filename {|v| p v}

# => "foo"
     ".."
     "bar"
each_line(*args, &block)

IO.foreach(self.to_s, *args, &block) と同じです。

[SEE_ALSO] IO.foreach

entries

Dir.entries(self.to_s) と同じです。

[SEE_ALSO] Dir.entries

executable?

FileTest.executable?(self.to_s) と同じです。

[SEE_ALSO] FileTest.#executable?

executable_real?

FileTest.executable_real?(self.to_s) と同じです。

[SEE_ALSO] FileTest.#executable_real?

exist?

FileTest.exist?(self.to_s) と同じです。

[SEE_ALSO] FileTest.#exist?

expand_path(*args)

Pathname.new(File.expand_path(self.to_s, *args)) と同じです。

[SEE_ALSO] File.expand_path

extname

File.extname(self.to_s) と同じです。

[SEE_ALSO] File.extname

file?

FileTest.file?(self.to_s) と同じです。

[SEE_ALSO] FileTest.#file?

find {|pathname| ...}

self 配下のすべてのファイルやディレクトリを 一つずつ引数 pathname に渡してブロックを実行します。

require 'find'
Find.find(self.to_s) {|f| yield Pathname.new(f)}

と同じです。

[SEE_ALSO] Find.#find

fnmatch(pattern, *args)

File.fnmatch(pattern, self.to_s, *args) と同じです。

[SEE_ALSO] File.fnmatch

fnmatch?(pattern, *args)

File.fnmatch?(pattern, self.to_s, *args) と同じです。

[SEE_ALSO] File.fnmatch?

foreach(*args, &block)

self の指し示すパスがディレクトリなら Dir.foreach(self.to_s, *args, &block) と、さもなければ IO.foreach(self.to_s, *args, &block) と同じです。

このメソッドは obsolete です。 each_line か each_entry を使ってください。

ftype

File.ftype(self.to_s) と同じです。

[SEE_ALSO] File.ftype

grpowned?

FileTest.grpowned?(self.to_s) と同じです。

[SEE_ALSO] FileTest.#grpowned?

hash -> Fixnum

ハッシュ値を返します。

join(*args)

Pathname.new(File.join(self.to_s, *args)) と同じです。

[SEE_ALSO] File.join

lchmod(mode)

File.lchmod(mode, self.to_s) と同じです。

[SEE_ALSO] File.lchmod

lchown(owner, group)

File.lchown(owner, group, self.to_s) と同じです。

[SEE_ALSO] File.lchown

lstat

File.lstat(self.to_s) と同じです。

[SEE_ALSO] File.lstat

make_link(old)

File.link(old, self.to_s) と同じです。

[SEE_ALSO] File.link

make_symlink(old)

File.symlink(old, self.to_s) と同じです。

[SEE_ALSO] File.symlink

mkdir(*args)

Dir.mkdir(self.to_s, *args) と同じです。

[SEE_ALSO] Dir.mkdir

mkpath

FileUtils.mkpath(self.to_s) と同じです。

[SEE_ALSO] FileUtils.#mkpath

mountpoint? -> bool

self がマウントポイントであれば真を返します。

mtime

File.mtime(self.to_s) を渡したものと同じです。

[SEE_ALSO] File.mtime

open(*args, &block)

File.open(self.to_s, *args, &block) と同じです。

[SEE_ALSO] File.open

opendir(&block)

Dir.open(self.to_s, &block) と同じです。

[SEE_ALSO] Dir.open

owned?

FileTest.owned?(self.to_s) と同じです。

[SEE_ALSO] FileTest.#owned?

parent -> Pathname

self の親ディレクトリを指す新しい Pathname オブジェクトを返します。

pipe?

FileTest.pipe?(self.to_s) と同じです。

[SEE_ALSO] FileTest.#pipe?

read(*args)

IO.read(self.to_s, *args)と同じです。

[SEE_ALSO] IO.read

readable?

FileTest.readable?(self.to_s) と同じです。

[SEE_ALSO] FileTest.#readable?

readable_real?

FileTest.readable_real?(self.to_s) と同じです。

[SEE_ALSO] FileTest.#readable_real?

readlines(*args)

IO.readlines(self.to_s, *args)と同じです。

[SEE_ALSO] IO.readlines

readlink

Pathname.new(File.readlink(self.to_s)) と同じです。

[SEE_ALSO] File.readlink

realdirpath -> Pathname

Pathname#realpath とほぼ同じで、最後のコンポーネントは実際に 存在しなくてもエラーになりません。

[SEE_ALSO] Pathname#realpath

realpath -> Pathname

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

また、ファイルシステムをアクセスし、実際に存在するパスを返します。 シンボリックリンクも解決されます。

self が指すパスが存在しない場合は例外 Errno::ENOENT が発生します。

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.realpath

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

[SEE_ALSO] Pathname#realdirpath

relative? -> bool

self が相対パス指定であれば真を返す。

relative_path_from(base_directory) -> Pathname

base_direcoty から self への相対パスを求め、その内容の新しい Pathname オブジェクトを生成して返します。

パス名の解決は文字列操作によって行われ、ファイルシステムをアクセス しません。

require 'pathname'

path = Pathname.new("/tmp/foo")
base = Pathname.new("/tmp")

p path.relative_path_from(base)

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

self が相対パスなら base_directory も相対パス、self が絶対パスなら base_directory も絶対パスでなければなりません。

base_directory は Pathname オブジェクトでなければなりません。

rename(to)

File.rename(self.to_s, to) と同じです。

[SEE_ALSO] File.rename

rmdir

Dir.rmdir(self.to_s) と同じです。

[SEE_ALSO] Dir.rmdir

rmtree

FileUtils.rm_r(self.to_s) と同じです。

[SEE_ALSO] FileUtils.#rm_r

root? -> bool

self がルートディレクトリであれば真を返します。判断は文字列操作によっ て行われ、ファイルシステムはアクセスされません。

setgid?

FileTest.setgid?(self.to_s) と同じです。

[SEE_ALSO] FileTest.#setgid?

setuid?

FileTest.setuid?(self.to_s) と同じです。

[SEE_ALSO] FileTest.#setuid?

size

FileTest.size(self.to_s) と同じです。

[SEE_ALSO] FileTest.#size

size?

FileTest.size?(self.to_s) と同じです。

[SEE_ALSO] FileTest.#size?

socket?

FileTest.socket?(self.to_s) と同じです。

[SEE_ALSO] FileTest.#socket?

split

File.split(self.to_s) と同じです。

[SEE_ALSO] File.split

stat

File.stat(self.to_s) と同じです。

[SEE_ALSO] File.stat

sticky?

FileTest.sticky?(self.to_s) と同じです。

[SEE_ALSO] FileTest.#sticky?

sub(pattern, replace) -> Pathname
sub(pattern) {|matched| ... } -> Pathname

self を表現するパス文字列に対して sub メソッドを呼び出し、その結果を内 容とする新しい Pathname オブジェクトを生成し、返します。 cf. String#sub

symlink?

FileTest.symlink?(self.to_s) と同じです。

[SEE_ALSO] FileTest.#symlink?

sysopen(*args)

IO.sysopen(self.to_s, *args)と同じです。

[SEE_ALSO] IO.sysopen

to_path

File.open などの引数に渡す際に呼ばれるメソッドです。 Pathname オブジェ クトにおいては、 to_s と同じです。

to_s -> String
to_str -> String

パス名を文字列で返します。

to_str は、File.open などの引数にそのまま Pathname オブジェクトを 渡せるようにするために用意されています。

require 'pathname'

path = Pathname.new("/tmp/hogehoge")
File.open(path)
truncate(length)

File.truncate(self.to_s, length) と同じです。

[SEE_ALSO] File.truncate

utime(atime, mtime)

File.utime(atime, mtime, self.to_s) と同じです。

[SEE_ALSO] File.utime

world_readable?

FileTest.world_readable?(self.to_s) と同じです。

[SEE_ALSO] FileTest.#world_readable?

world_writable?

FileTest.world_writable?(self.to_s) と同じです。

[SEE_ALSO] FileTest.#world_writable?

writable?

FileTest.writable?(self.to_s) と同じです。

[SEE_ALSO] FileTest.#writable?

writable_real?

FileTest.writable_real?(self.to_s) と同じです。

[SEE_ALSO] FileTest.#writable_real?

zero?

FileTest.zero?(self.to_s) と同じです。

[SEE_ALSO] FileTest.#zero?

定数

SEPARATOR_PAT

パス名のなかのディレクトリを区切る部分にマッチする正規表現です。

TO_PATH

内部的に使っている定数です。利用者が使うことはありません。

Methods

Classes