class Pathname

[edit]

要約

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

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

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

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

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

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



require 'pathname'

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

目次

特異メソッド
インスタンスメソッド
定数

特異メソッド

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

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



require "pathname"

Pathname.getwd #=> #<Pathname:/home/zzak/projects/ruby>

[SEE_ALSO] Dir.getwd

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

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

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

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

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

require "pathname"
Pathname.glob("lib/i*.rb") # => [#<Pathname:lib/ipaddr.rb>, #<Pathname:lib/irb.rb>]

[SEE_ALSO] Dir.glob

[SEE_ALSO] Pathname#glob

new(path) -> Pathname[permalink][rdoc][edit]

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

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


require "pathname"

Pathname.new(__FILE__) # => #<Pathname:/path/to/file.rb>

インスタンスメソッド

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

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

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



require '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 -> -1 | 0 | 1 | nil[permalink][rdoc][edit]

パス名を比較します。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][edit]
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][edit]

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



require "pathname"

pathname = Pathname("/path/to/example.rb")
pathname.absolute? # => true
pathname = Pathname("../")
pathname.absolute? # => false
ascend {|pathname| ... } -> nil[permalink][rdoc][edit]
ascend -> Enumerator

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



require '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][edit]

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



require "pathname"

pathname = Pathname("testfile")
pathname.atime # => 2018-12-18 20:58:13 +0900

[SEE_ALSO] File.atime

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

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

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


require "pathname"

Pathname("ruby/ruby.c").basename          #=> #<Pathname:"ruby.c">
Pathname("ruby/ruby.c").basename(".c")    #=> #<Pathname:"ruby">
Pathname("ruby/ruby.c").basename(".*")    #=> #<Pathname:"ruby">
Pathname("ruby/ruby.exe").basename(".*")  #=> #<Pathname:"ruby">
Pathname("ruby/y.tab.c").basename(".*")   #=> #<Pathname:"y.tab">

[SEE_ALSO] File.basename

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

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



require "pathname"

pathname = Pathname("testfile")
pathname.binread           # => "This is line one\nThis is line two\nThis is line three\nAnd so on...\n"
pathname.binread(20)       # => "This is line one\nThi"
pathname.binread(20, 10)   # => "ne one\nThis is line "

[SEE_ALSO] IO.binread

binwrite(string, offset=nil) -> Integer[permalink][rdoc][edit]

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

[SEE_ALSO] IO.binwrite

birthtime -> Time[permalink][rdoc][edit]

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

[EXCEPTION] NotImplementedError:
Windows のような birthtime のない環境で発生します。

[SEE_ALSO] File.birthtime

blockdev? -> bool[permalink][rdoc][edit]

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

[SEE_ALSO] FileTest.#blockdev?

chardev? -> bool[permalink][rdoc][edit]

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

[SEE_ALSO] FileTest.#chardev?

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

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][edit]

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

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

[SEE_ALSO] File.chmod

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

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

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


require 'pathname'

Pathname('testfile').stat.uid     # => 501
Pathname('testfile').chown(502, 12)
Pathname('testfile').stat.uid     # => 502

[SEE_ALSO] File.chown, File#chown

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

余計な "."、".." や "/" を取り除いた新しい 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][edit]

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



require 'pathname'

IO.write("testfile", "test")
pathname = Pathname("testfile")
pathname.ctime # => 2019-01-14 00:39:51 +0900
sleep 1
pathname.chmod(0755)
pathname.ctime # => 2019-01-14 00:39:52 +0900

[SEE_ALSO] File.ctime

unlink -> Integer[permalink][rdoc][edit]
delete -> Integer

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



require "pathname"

pathname = Pathname("/path/to/sample")
pathname.exist? # => true
pathname.unlink # => 1
pathname.exist? # => false
descend {|pathname| ... } -> nil[permalink][rdoc][edit]
descend -> Enumerator

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



require '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][edit]

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

[SEE_ALSO] FileTest.#directory?

dirname -> Pathname[permalink][rdoc][edit]

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



require "pathname"

Pathname('/usr/bin/shutdown').dirname # => #<Pathname:/usr/bin>

[SEE_ALSO] File.dirname

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

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

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


require "pathname"

Pathname("/usr/local").each_child {|f| p f }
# => #<Pathname:/usr/local/bin>
# => #<Pathname:/usr/local/etc>
# => #<Pathname:/usr/local/include>
# => #<Pathname:/usr/local/lib>
# => #<Pathname:/usr/local/opt>
# => #<Pathname:/usr/local/sbin>
# => #<Pathname:/usr/local/share>
# => #<Pathname:/usr/local/var>

Pathname("/usr/local").each_child(false) {|f| p f }
# => #<Pathname:bin>
# => #<Pathname:etc>
# => #<Pathname:include>
# => #<Pathname:lib>
# => #<Pathname:opt>
# => #<Pathname:sbin>
# => #<Pathname:share>
# => #<Pathname:var>

[SEE_ALSO] Pathname#children

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

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

ブロックを省略した場合は Enumerator を返します。



require "pathname"

Pathname("/usr/local").each_entry {|f| p f }

# => #<Pathname:.>
# => #<Pathname:..>
# => #<Pathname:bin>
# => #<Pathname:etc>
# => #<Pathname:include>
# => #<Pathname:lib>
# => #<Pathname:opt>

[SEE_ALSO] Dir.foreach

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

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



require 'pathname'

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

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

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



require "pathname"

IO.write("testfile", "line1\nline2,\nline3\n")
Pathname("testfile").each_line
# => #<Enumerator: IO:foreach("testfile")>
例 ブロックを指定

require "pathname"

IO.write("testfile", "line1\nline2,\nline3\n")
Pathname("testfile").each_line {|f| p f }

# => "line1\n"
# => "line2,\n"
# => "line3\n"
例 limit を指定

require "pathname"

IO.write("testfile", "line1\nline2,\nline3\n")
Pathname("testfile").each_line(4) {|f| p f }

# => "line"
# => "1\n"
# => "line"
# => "2,\n"
# => "line"
# => "3\n"
例 sep を指定

require "pathname"

IO.write("testfile", "line1\nline2,\nline3\n")
Pathname("testfile").each_line(",") {|f| p f }

# => "line1\nline2,"
# => "\nline3\n"

[SEE_ALSO] IO.foreach

empty? -> bool[permalink][rdoc][edit]

ディレクトリに対しては Dir.empty?(self.to_s) と同じ、他に対しては FileTest.empty?(self.to_s) と同じです。

例 ディレクトリの場合

require "pathname"
require 'tmpdir'

Pathname("/usr/local").empty?               # => false
Dir.mktmpdir { |dir| Pathname(dir).empty? } # => true
例 ファイルの場合

require "pathname"
require 'tempfile'

Pathname("testfile").empty?                           # => false
Tempfile.create("tmp") { |tmp| Pathname(tmp).empty? } # => true

[SEE_ALSO] Dir.empty?, FileTest.#empty?, Pathname#zero?

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

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

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


require 'pathname'
require 'pp'

pp Pathname('/usr/local').entries
# => [#<Pathname:.>,
#     #<Pathname:..>,
#     #<Pathname:bin>,
#     #<Pathname:etc>,
#     #<Pathname:include>,
#     #<Pathname:lib>,
#     #<Pathname:opt>,
#     #<Pathname:sbin>,
#     #<Pathname:share>,
#     #<Pathname:var>]

[SEE_ALSO] Dir.entries

executable? -> bool[permalink][rdoc][edit]

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

[SEE_ALSO] FileTest.#executable?

executable_real? -> bool[permalink][rdoc][edit]

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

[SEE_ALSO] FileTest.#executable_real?

exist? -> bool[permalink][rdoc][edit]

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

[SEE_ALSO] FileTest.#exist?

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

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

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


require "pathname"

path = Pathname("testfile")
Pathname.pwd             # => #<Pathname:/path/to>
path.expand_path         # => #<Pathname:/path/to/testfile>
path.expand_path("../")  # => #<Pathname:/path/testfile>

[SEE_ALSO] File.expand_path

extname -> String[permalink][rdoc][edit]

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

[SEE_ALSO] File.extname

file? -> bool[permalink][rdoc][edit]

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

[SEE_ALSO] FileTest.#file?

find(ignore_error: true) -> Enumerator[permalink][rdoc][edit]
find(ignore_error: true) {|pathname| ...} -> nil

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

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

と同じです。

ブロックを省略した場合は Enumerator を返します。

[PARAM] ignore_error:
探索中に発生した例外を無視するかどうかを指定します。

[SEE_ALSO] Find.#find

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

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

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


require "pathname"

path = Pathname("testfile")
path.fnmatch("test*")                       # => true
path.fnmatch("TEST*")                       # => false
path.fnmatch("TEST*", File::FNM_CASEFOLD)   # => true

[SEE_ALSO] File.fnmatch

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

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

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

[SEE_ALSO] File.fnmatch?

ftype -> String[permalink][rdoc][edit]

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

[SEE_ALSO] File.ftype

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

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

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

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

このメソッドは内部で Dir.glob の base キーワード引数を使っています。

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

require "pathname"
Pathname("ruby-2.4.2").glob("R*.md") # => [#<Pathname:ruby-2.4.2/README.md>, #<Pathname:ruby-2.4.2/README.ja.md>]

[SEE_ALSO] Dir.glob

[SEE_ALSO] Pathname.glob

grpowned? -> bool[permalink][rdoc][edit]

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

[SEE_ALSO] FileTest.#grpowned?

hash -> Integer[permalink][rdoc][edit]

ハッシュ値を返します。

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

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

[PARAM] args:
連結したいディレクトリ名やファイル名を文字列で与えます。


require "pathname"

path0 = Pathname("/usr")                # Pathname:/usr
path0 = path0.join("bin/ruby")          # Pathname:/usr/bin/ruby
    # 上記の path0 の処理は下記の path1 と同様のパスになります
path1 = Pathname("/usr") + "bin/ruby"   # Pathname:/usr/bin/ruby
path0 == path1                          #=> true
lchmod(mode) -> Integer[permalink][rdoc][edit]

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

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

[SEE_ALSO] File.lchmod

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

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

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

[SEE_ALSO] File.lchown

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

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][edit]

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

[SEE_ALSO] Dir.mkdir

mkpath -> nil[permalink][rdoc][edit]

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

[SEE_ALSO] FileUtils.#mkpath

mountpoint? -> bool[permalink][rdoc][edit]

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



require "pathname"

path = Pathname("/")
path.mountpoint? # => true
path = Pathname("/usr")
path.mountpoint? # => false
mtime -> Time[permalink][rdoc][edit]

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

[SEE_ALSO] File.mtime

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

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

[SEE_ALSO] File.open

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

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

[SEE_ALSO] Dir.open

owned? -> bool[permalink][rdoc][edit]

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

[SEE_ALSO] FileTest.#owned?

parent -> Pathname[permalink][rdoc][edit]

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

例 絶対パス

require "pathname"

path = Pathname("/usr")
path        # => #<Pathname:/usr>
path.parent # => #<Pathname:/>
例 相対パス

require "pathname"

path = Pathname("foo/bar")
path.parent               # => #<Pathname:foo>
path.parent.parent        # => #<Pathname:.>
path.parent.parent.parent # => #<Pathname:..>
pipe? -> bool[permalink][rdoc][edit]

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

[SEE_ALSO] FileTest.#pipe?

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

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

[SEE_ALSO] IO.read

readable? -> bool[permalink][rdoc][edit]

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

[SEE_ALSO] FileTest.#readable?

readable_real? -> bool[permalink][rdoc][edit]

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

[SEE_ALSO] FileTest.#readable_real?

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

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][edit]

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

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


require "pathname"

path = Pathname("/not_exist")
path.realdirpath  # => #<Pathname:/not_exist>
path.realpath     # => Errno::ENOENT

# 最後ではないコンポーネント(/not_exist_1)も存在しないのでエラーになる。
path = Pathname("/not_exist_1/not_exist_2")
path.realdirpath  # => Errno::ENOENT

[SEE_ALSO] Pathname#realpath

realpath(basedir = nil) -> Pathname[permalink][rdoc][edit]
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][edit]

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



require 'pathname'

p = Pathname.new('/im/sure')
p.relative? #=> false

p = Pathname.new('not/so/sure')
p.relative? #=> true
relative_path_from(base_directory) -> Pathname[permalink][rdoc][edit]

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

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

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

[PARAM] base_directory:
ベースディレクトリを表す Pathname オブジェクトを指定します。
[EXCEPTION] ArgumentError:
Windows上でドライブが違うなど、base_directory から self への相対パスが求められないときに例外が発生します。


require 'pathname'

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

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

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

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

[SEE_ALSO] File.rename

rmdir -> 0[permalink][rdoc][edit]

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

[SEE_ALSO] Dir.rmdir

rmtree -> nil[permalink][rdoc][edit]

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

[SEE_ALSO] FileUtils.#rm_r

root? -> bool[permalink][rdoc][edit]

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



require 'pathname'

Pathname('/').root?         # => true
Pathname('/im/sure').root?  # => false
setgid? -> bool[permalink][rdoc][edit]

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

[SEE_ALSO] FileTest.#setgid?

setuid? -> bool[permalink][rdoc][edit]

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

[SEE_ALSO] FileTest.#setuid?

size -> Integer[permalink][rdoc][edit]

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

[SEE_ALSO] FileTest.#size

size? -> bool[permalink][rdoc][edit]

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

[SEE_ALSO] FileTest.#size?

socket? -> bool[permalink][rdoc][edit]

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

[SEE_ALSO] FileTest.#socket?

split -> Array[permalink][rdoc][edit]

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



require "pathname"

pathname = Pathname("/path/to/sample")
pathname.split # => [#<Pathname:/path/to>, #<Pathname:sample>]

[SEE_ALSO] File.split

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

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

[SEE_ALSO] File.stat

sticky? -> bool[permalink][rdoc][edit]

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

[SEE_ALSO] FileTest.#sticky?

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

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

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


require 'pathname'

path1 = Pathname('/usr/bin/perl')
path1.sub('perl', 'ruby') #=> #<Pathname:/usr/bin/ruby>

[SEE_ALSO] String#sub

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

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

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

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


require "pathname"

Pathname('/usr/bin/shutdown').sub_ext('.rb')      # => #<Pathname:/usr/bin/shutdown.rb>
Pathname('/home/user/test.txt').sub_ext('.pdf')   # => #<Pathname:/home/user/test.pdf>
Pathname('/home/user/test').sub_ext('.pdf')       # => #<Pathname:/home/user/test.pdf>
Pathname('/home/user/test.').sub_ext('.pdf')      # => #<Pathname:/home/user/test..pdf>
Pathname('/home/user/.test').sub_ext('.pdf')      # => #<Pathname:/home/user/.test.pdf>
Pathname('/home/user/test.tar.gz').sub_ext('.xz') # => #<Pathname:/home/user/test.tar.xz>

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

[SEE_ALSO] FileTest.#symlink?

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

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

[SEE_ALSO] IO.sysopen

to_path -> String[permalink][rdoc][edit]

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

[SEE_ALSO] Pathname#to_s

to_s -> String[permalink][rdoc][edit]

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



require 'pathname'

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

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

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

[SEE_ALSO] File.truncate

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

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

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

[SEE_ALSO] File.utime

world_readable? -> bool[permalink][rdoc][edit]

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

[SEE_ALSO] FileTest.#world_readable?

world_writable? -> bool[permalink][rdoc][edit]

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

[SEE_ALSO] FileTest.#world_writable?

writable? -> bool[permalink][rdoc][edit]

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

[SEE_ALSO] FileTest.#writable?

writable_real? -> bool[permalink][rdoc][edit]

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

[SEE_ALSO] FileTest.#writable_real?

write(string, offset=nil, **opts) -> Integer[permalink][rdoc][edit]

IO.write(self.to_s, string, offset, **opts)と同じです。

[SEE_ALSO] IO.write

zero? -> bool[permalink][rdoc][edit]

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

[SEE_ALSO] FileTest.#zero? , Pathname#empty?

定数

SEPARATOR_PAT -> Regexp[permalink][rdoc][edit]

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

この値は環境依存です。

TO_PATH -> Symbol[permalink][rdoc][edit]

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