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

class Pathname

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

要約

パス名をオブジェクト指向らしく扱うクラスです。

Pathname オブジェクトはパス名を表しており、ファイルやディレクトリそのものを表してはいません。 当然、存在しないファイルのパス名も扱えます。

絶対パスも相対パスも扱えます。

Pathname オブジェクトは immutable であり、自身を破壊的に操作するメソッドはありません。

Pathname のインスタンスメソッドには、ディレクトリのパスを返す Pathname#dirname のように、 文字列操作だけで結果を返すものもあれば、ファイルの中身を読み出す Pathname#read のように ファイルシステムにアクセスするものもあります。

Pathname オブジェクトの生成には、Pathname.new のほかに Kernel#Pathname も使えます。

Pathname.new("foo/bar") # => #<Pathname:foo/bar>
Pathname("foo/bar")     # => #<Pathname:foo/bar>

目次

特異メソッド
getwd pwd glob new
インスタンスメソッド
+ <=> == === eql? absolute? ascend atime basename binread blockdev? chardev? children chmod chown cleanpath ctime delete unlink descend directory? dirname each_child each_entry each_filename each_line entries executable? executable_real? exist? expand_path extname file? find fnmatch fnmatch? foreach ftype grpowned? hash join lchmod lchown lstat make_link make_symlink mkdir mkpath mountpoint? mtime open opendir owned? parent pipe? read readable? readable_real? readlines readlink realdirpath realpath relative? relative_path_from rename rmdir rmtree root? setgid? setuid? size size? socket? split stat sticky? sub sub_ext symlink? sysopen to_path to_s truncate utime world_readable? world_writable? writable? writable_real? zero?
定数
SEPARATOR_PAT TO_PATH

特異メソッド

getwd -> Pathname[permalink][rdoc]
pwd -> Pathname

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

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

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

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

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

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

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

[PARAM] path:
文字列、または類似のオブジェクトを与えます。 実際には to_str に反応するオブジェクトなら何でも構いません。
[EXCEPTION] ArgumentError:
path が \0 を含んでいると発生します。

インスタンスメソッド

self + other -> Pathname[permalink][rdoc]

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

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

Pathname("foo/bar")+"baz" # => #<Pathname:foo/bar/baz>
Pathname("foo/bar/")+"baz" # => #<Pathname:foo/bar/baz>
Pathname("foo/bar")+"/baz" # => #<Pathname:/baz>
Pathname("foo/bar")+"../baz" # => #<Pathname:foo/baz>
[PARAM] other:
文字列か Pathname オブジェクトを指定します。
self <=> other -> bool[permalink][rdoc]

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

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

[PARAM] 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[permalink][rdoc]
self === other -> bool
eql?(other) -> bool

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

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

[PARAM] 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[permalink][rdoc]

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

ascend {|pathname| ... } -> nil[permalink][rdoc]

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 -> Time[permalink][rdoc]

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

[SEE_ALSO] File.atime

basename(suffix = "") -> Pathname[permalink][rdoc]

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

[PARAM] suffix:
サフィックスを文字列で与えます。'.*' という文字列を与えた場合、'*' はワイルドカードとして働き '.' を含まない任意の文字列にマッチします。

[SEE_ALSO] File.basename

binread(*args) -> String | nil[permalink][rdoc]

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

[SEE_ALSO] IO.binread

blockdev? -> bool[permalink][rdoc]

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

[SEE_ALSO] FileTest.#blockdev?

chardev? -> bool[permalink][rdoc]

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

[SEE_ALSO] FileTest.#chardev?

children(with_directory = true) -> [Pathname][permalink][rdoc]

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

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

[PARAM] with_directory:
偽を指定するとファイル名のみ返します。デフォルトは真です。
[EXCEPTION] Errno::EXXX:
self が存在しないパスであったりディレクトリでなければ例外が発生します。
require 'pathname'
Pathname.new("/tmp").children # => [#<Pathname:.X11-unix>, #<Pathname:.iroha_unix>, ... ]
chmod(mode) -> Integer[permalink][rdoc]

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

[PARAM] mode:
ファイルのアクセス権限を整数で指定します。

[SEE_ALSO] File.chmod

chown(owner, group) -> Integer[permalink][rdoc]

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

[PARAM] owner:
オーナーを指定します。
[PARAM] group:
グループを指定します。

[SEE_ALSO] File.chown

cleanpath(consider_symlink = false) -> Pathname[permalink][rdoc]

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

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

[PARAM] consider_symlink:
真ならパス要素にシンボリックリンクがあった場合 にも問題ないように .. を残します。
require "pathname"
path = Pathname.new("//.././../")
path                  # => #<Pathname://.././../>
path.cleanpath        # => #<Pathname:/>


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")

path.cleanpath       # => #<Pathname:bar/bar>
path.cleanpath(true) # => #<Pathname:bar/foo/../bar>
ctime -> Time[permalink][rdoc]

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

[SEE_ALSO] File.ctime

unlink -> 0[permalink][rdoc]
delete -> 0

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

descend {|pathname| ... } -> nil[permalink][rdoc]

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? -> bool[permalink][rdoc]

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

[SEE_ALSO] FileTest.#directory?

dirname -> Pathname[permalink][rdoc]

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

[SEE_ALSO] File.dirname

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

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

[PARAM] with_directory:
偽を指定するとファイル名のみ返します。デフォルトは真です。

[SEE_ALSO] Pathname#children

each_entry {|pathname| ... } -> nil[permalink][rdoc]

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

[SEE_ALSO] Dir.foreach

each_filename {|v| ... } -> nil[permalink][rdoc]

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

require 'pathname'

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

# => "foo"
     ".."
     "bar"
each_line(*args) {|line| ... } -> nil[permalink][rdoc]
each_line(*args) -> Enumerator

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

[SEE_ALSO] IO.foreach

entries -> [Pathname][permalink][rdoc]

self に含まれるファイルエントリ名を元にした Pathname オブジェクトの配列を返します。

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

[SEE_ALSO] Dir.entries

executable? -> bool[permalink][rdoc]

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

[SEE_ALSO] FileTest.#executable?

executable_real? -> bool[permalink][rdoc]

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

[SEE_ALSO] FileTest.#executable_real?

exist? -> bool[permalink][rdoc]

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

[SEE_ALSO] FileTest.#exist?

expand_path(default_dir = '.') -> Pathname[permalink][rdoc]

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

[PARAM] default_dir:
self が相対パスであれば default_dir を基準に展開されます。

[SEE_ALSO] File.expand_path

extname -> String[permalink][rdoc]

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

[SEE_ALSO] File.extname

file? -> bool[permalink][rdoc]

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

[SEE_ALSO] FileTest.#file?

find {|pathname| ...} -> nil[permalink][rdoc]

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

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

と同じです。

[SEE_ALSO] Find.#find

fnmatch(pattern, *args) -> bool[permalink][rdoc]

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

[PARAM] pattern:
パターンを文字列で指定します。ワイルドカードとして `*', `?', `[]' が使用できま す。Dir.glob とは違って `{}' や `**/' は使用できません。
[PARAM] args:
File.fnmatch を参照してください。

[SEE_ALSO] File.fnmatch

fnmatch?(pattern, *args) -> bool[permalink][rdoc]

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

[PARAM] pattern:
パターンを文字列で指定します。ワイルドカードとして `*', `?', `[]' が使用できま す。Dir.glob とは違って `{}' や `**/' は使用できません。
[PARAM] args:
File.fnmatch を参照してください。

[SEE_ALSO] File.fnmatch?

foreach(*args) {|path| ... } -> nil[permalink][rdoc]

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

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

ftype -> String[permalink][rdoc]

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

[SEE_ALSO] File.ftype

grpowned? -> bool[permalink][rdoc]

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

[SEE_ALSO] FileTest.#grpowned?

hash -> Fixnum[permalink][rdoc]

ハッシュ値を返します。

join(*args) -> Pathname[permalink][rdoc]

与えられたパス名を連結します。

[PARAM] args:
連結したいディレクトリ名やファイル名を文字列で与えます。
lchmod(mode) -> Integer[permalink][rdoc]

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

[PARAM] mode:
ファイルのアクセス権限を整数で指定します。

[SEE_ALSO] File.lchmod

lchown(owner, group) -> Integer[permalink][rdoc]

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

[PARAM] owner:
オーナーを指定します。
[PARAM] group:
グループを指定します。

[SEE_ALSO] File.lchown

lstat -> File::Stat[permalink][rdoc]

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

[SEE_ALSO] File.lstat

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

[SEE_ALSO] File.link

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

[SEE_ALSO] File.symlink

mkdir(*args) -> 0[permalink][rdoc]

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

[SEE_ALSO] Dir.mkdir

mkpath -> nil[permalink][rdoc]

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

[SEE_ALSO] FileUtils.#mkpath

mountpoint? -> bool[permalink][rdoc]

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

mtime -> Time[permalink][rdoc]

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

[SEE_ALSO] File.mtime

open(mode = 'r', perm = 0666) -> File[permalink][rdoc]
open(mode = 'r', perm = 0666) {|file| ... } -> object

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

[SEE_ALSO] File.open

opendir -> Dir[permalink][rdoc]
opendir {|dir| ... } -> nil

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

[SEE_ALSO] Dir.open

owned? -> bool[permalink][rdoc]

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

[SEE_ALSO] FileTest.#owned?

parent -> Pathname[permalink][rdoc]

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

pipe? -> bool[permalink][rdoc]

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

[SEE_ALSO] FileTest.#pipe?

read(*args) -> String | nil[permalink][rdoc]

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

[SEE_ALSO] IO.read

readable? -> bool[permalink][rdoc]

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

[SEE_ALSO] FileTest.#readable?

readable_real? -> bool[permalink][rdoc]

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

[SEE_ALSO] FileTest.#readable_real?

readlines(*args) -> [String][permalink][rdoc]

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

[SEE_ALSO] IO.readlines

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

[SEE_ALSO] File.readlink

realdirpath(basedir = nil) -> Pathname[permalink][rdoc]

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

[PARAM] basedir:
ベースディレクトリを指定します。省略するとカレントディレクトリになります。

[SEE_ALSO] Pathname#realpath

realpath(basedir = nil) -> Pathname[permalink][rdoc]
realpath -> Pathname

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

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

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

[PARAM] basedir:
ベースディレクトリを指定します。省略するとカレントディレクトリになります。
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, File.realpath

relative? -> bool[permalink][rdoc]

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

relative_path_from(base_directory) -> Pathname[permalink][rdoc]

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

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

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

[PARAM] base_directory:
ベースディレクトリを表す Pathname オブジェクトを指定します。
require 'pathname'

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

path.relative_path_from(base) # => #<Pathname:foo>
rename(to) -> 0[permalink][rdoc]

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

[PARAM] to:
ファイル名を表す文字列を指定します。

[SEE_ALSO] File.rename

rmdir -> 0[permalink][rdoc]

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

[SEE_ALSO] Dir.rmdir

rmtree -> nil[permalink][rdoc]

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

[SEE_ALSO] FileUtils.#rm_r

root? -> bool[permalink][rdoc]

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

setgid? -> bool[permalink][rdoc]

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

[SEE_ALSO] FileTest.#setgid?

setuid? -> bool[permalink][rdoc]

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

[SEE_ALSO] FileTest.#setuid?

size -> Integer[permalink][rdoc]

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

[SEE_ALSO] FileTest.#size

size? -> bool[permalink][rdoc]

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

[SEE_ALSO] FileTest.#size?

socket? -> bool[permalink][rdoc]

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

[SEE_ALSO] FileTest.#socket?

split -> Array[permalink][rdoc]

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

[SEE_ALSO] File.split

stat -> File::Stat[permalink][rdoc]

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

[SEE_ALSO] File.stat

sticky? -> bool[permalink][rdoc]

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

[SEE_ALSO] FileTest.#sticky?

sub(pattern, replace) -> Pathname[permalink][rdoc]
sub(pattern) {|matched| ... } -> Pathname

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

[PARAM] pattern:
置き換える文字列のパターンを指定します。
[PARAM] replace:
pattern で指定した文字列と置き換える文字列を指定します。

[SEE_ALSO] String#sub

sub_ext(replace) -> Pathname[permalink][rdoc]

拡張子を与えられた文字列で置き換えた Pathname オブジェクト返します。

自身が拡張子を持たない場合は、与えられた文字列を拡張子として付加します。

[PARAM] replace:
拡張子を文字列で指定します。

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

[SEE_ALSO] FileTest.#symlink?

sysopen(*args) -> Integer[permalink][rdoc]

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

[SEE_ALSO] IO.sysopen

to_path -> String[permalink][rdoc]

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

to_s -> String[permalink][rdoc]

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

require 'pathname'

path = Pathname.new("/tmp/hogehoge")
File.open(path)
truncate(length) -> 0[permalink][rdoc]

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

[PARAM] length:
変更したいサイズを整数で与えます。

[SEE_ALSO] File.truncate

utime(atime, mtime) -> Integer[permalink][rdoc]

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

[PARAM] atime:
最終アクセス時刻を Time か、起算時からの経過秒数を数値で指定します。
[PARAM] utime:
更新時刻を Time か、起算時からの経過秒数を数値で指定します。

[SEE_ALSO] File.utime

world_readable? -> bool[permalink][rdoc]

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

[SEE_ALSO] FileTest.#world_readable?

world_writable? -> bool[permalink][rdoc]

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

[SEE_ALSO] FileTest.#world_writable?

writable? -> bool[permalink][rdoc]

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

[SEE_ALSO] FileTest.#writable?

writable_real? -> bool[permalink][rdoc]

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

[SEE_ALSO] FileTest.#writable_real?

zero? -> bool[permalink][rdoc]

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

[SEE_ALSO] FileTest.#zero?

定数

SEPARATOR_PAT -> Regexp[permalink][rdoc]

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

この値は環境依存です。

TO_PATH -> Symbol[permalink][rdoc]

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