Ruby 2.3.0 リファレンスマニュアル > ライブラリ一覧 > pathnameライブラリ > Pathnameクラス
クラスの継承リスト: Pathname < Object < Kernel < BasicObject
パス名をオブジェクト指向らしく扱うクラスです。
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]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]glob(pattern, flags=0) {|pathname| ...} -> nil
ワイルドカードの展開を行なった結果を、 Pathname オブジェクトの配列として返します。
引数の意味は、Dir.glob と同じです。 flag の初期値である 0 は「何 も指定しない」ことを意味します。
ブロックが与えられたときは、ワイルドカードにマッチした Pathname オブジェ クトを1つずつ引数としてそのブロックに与えて実行させます。この場合、値と しては nil を返します。
require "pathname"
Pathname.glob("lib/i*.rb") # => [#<Pathname:lib/ipaddr.rb>, #<Pathname:lib/irb.rb>]
[SEE_ALSO] Dir.glob
new(path) -> Pathname
[permalink][rdoc]文字列 path を元に Pathname オブジェクトを生成します。
require "pathname"
Pathname.new(__FILE__) # => #<Pathname:/path/to/file.rb>
self + other -> Pathname
[permalink][rdoc]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>
self <=> other -> bool
[permalink][rdoc]パス名を比較します。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
[permalink][rdoc]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
[permalink][rdoc]self が絶対パス指定であれば真を返します。
require "pathname"
pathname = Pathname("/path/to/example.rb")
pathname.absolute? # => true
pathname = Pathname("../")
pathname.absolute? # => false
ascend {|pathname| ... } -> nil
[permalink][rdoc]self のパス名から親方向に辿っていったときの各パス名を新しい Pathname オ ブジェクトとして生成し、ブロックへの引数として渡して実行します。
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]File.atime(self.to_s) を渡したものと同じです。
[SEE_ALSO] File.atime
basename(suffix = "") -> Pathname
[permalink][rdoc]Pathname.new(File.basename(self.to_s, suffix)) と同じです。
[SEE_ALSO] File.basename
binread(*args) -> String | nil
[permalink][rdoc]IO.binread(self.to_s, *args)と同じです。
[SEE_ALSO] IO.binread
binwrite(string, offset=nil) -> Integer
[permalink][rdoc]IO.binwrite(self.to_s, *args)と同じです。
[SEE_ALSO] IO.binwrite
birthtime -> Time
[permalink][rdoc]File.birthtime(self.to_s) を渡したものと同じです。
[SEE_ALSO] File.birthtime
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オブジェクト)の配列を返します。
ただし、 ".", ".." は要素に含まれません。
require 'pathname' Pathname.new("/tmp").children # => [#<Pathname:.X11-unix>, #<Pathname:.iroha_unix>, ... ]
chmod(mode) -> Integer
[permalink][rdoc]File.chmod(mode, self.to_s) と同じです。
[SEE_ALSO] File.chmod
chown(owner, group) -> Integer
[permalink][rdoc]File.chown(owner, group, self.to_s) と同じです。
[SEE_ALSO] File.chown
cleanpath(consider_symlink = false) -> Pathname
[permalink][rdoc]余計な "."、".." や "/" を取り除いた新しい Pathname オブジェクトを返します。
cleanpath は、実際にファイルシステムを参照することなく、文字列操作 だけで処理を行います。
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) を渡したものと同じです。
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 -> 0
[permalink][rdoc]delete -> 0
self が指すディレクトリあるいはファイルを削除します。
descend {|pathname| ... } -> nil
[permalink][rdoc]self のパス名の親から子供へと辿っていったときの各パス名を新しい Pathname オブジェクトとして生成し、ブロックへの引数として渡して実行しま す。
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]FileTest.directory?(self.to_s) と同じです。
[SEE_ALSO] FileTest.#directory?
dirname -> Pathname
[permalink][rdoc]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]each_child(with_directory = true) {|pathname| ...} -> [Pathname]
self.children(with_directory).each と同じです。
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]Dir.foreach(self.to_s) {|f| yield Pathname.new(f) } と同じです。
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]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 オブジェクトの配列を返します。
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]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)) と同じです。
[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(ignore_error: true) -> Enumerator
[permalink][rdoc]find(ignore_error: true) {|pathname| ...} -> nil
self 配下のすべてのファイルやディレクトリを 一つずつ引数 pathname に渡してブロックを実行します。
require 'find' Find.find(self.to_s) {|f| yield Pathname.new(f)}
と同じです。
ブロックを省略した場合は、上記の処理を行うような Enumerator を返 します。
[SEE_ALSO] Find.#find
fnmatch(pattern, *args) -> bool
[permalink][rdoc]File.fnmatch(pattern, self.to_s, *args) と同じです。
[SEE_ALSO] File.fnmatch
fnmatch?(pattern, *args) -> bool
[permalink][rdoc]File.fnmatch?(pattern, self.to_s, *args) と同じです。
[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 -> Integer
[permalink][rdoc]ハッシュ値を返します。
join(*args) -> Pathname
[permalink][rdoc]与えられたパス名を連結します。
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]File.lchmod(mode, self.to_s) と同じです。
[SEE_ALSO] File.lchmod
lchown(owner, group) -> Integer
[permalink][rdoc]File.lchown(owner, group, self.to_s) と同じです。
[SEE_ALSO] File.lchown
lstat -> File::Stat
[permalink][rdoc]File.lstat(self.to_s) と同じです。
[SEE_ALSO] File.lstat
make_link(old) -> 0
[permalink][rdoc]File.link(old, self.to_s) と同じです。
[SEE_ALSO] File.link
make_symlink(old) -> 0
[permalink][rdoc]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 がマウントポイントであれば真を返します。
require "pathname"
path = Pathname("/")
path.mountpoint? # => true
path = Pathname("/usr")
path.mountpoint? # => false
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 オブジェクトを返します。
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]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
readlink -> Pathname
[permalink][rdoc]Pathname.new(File.readlink(self.to_s)) と同じです。
[SEE_ALSO] File.readlink
realdirpath(basedir = nil) -> Pathname
[permalink][rdoc]Pathname#realpath とほぼ同じで、最後のコンポーネントは実際に 存在しなくてもエラーになりません。
[SEE_ALSO] Pathname#realpath
realpath(basedir = nil) -> Pathname
[permalink][rdoc]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, 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 も絶対パスでなければなりません。
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) と同じです。
[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 がルートディレクトリであれば真を返します。判断は文字列操作によっ て行われ、ファイルシステムはアクセスされません。
require 'pathname'
Pathname('/').root? # => true
Pathname('/im/sure').root? # => false
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) と同じです。
require "pathname"
pathname = Pathname("/path/to/sample")
pathname.split # => [#<Pathname:/path/to>, #<Pathname:sample>]
[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 オブジェクトを生成し、返します。
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]拡張子を与えられた文字列で置き換えた Pathname オブジェクトを返します。
自身が拡張子を持たない場合は、与えられた文字列を拡張子として付加します。
symlink? -> bool
[permalink][rdoc]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 と同じです。
[SEE_ALSO] 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) と同じです。
[SEE_ALSO] File.truncate
utime(atime, mtime) -> Integer
[permalink][rdoc]File.utime(atime, mtime, self.to_s) と同じです。
[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?
write(string, offset=nil, opt={}) -> Integer
[permalink][rdoc]IO.write(self.to_s, *args)と同じです。
[SEE_ALSO] IO.write
zero? -> bool
[permalink][rdoc]FileTest.zero?(self.to_s) と同じです。
[SEE_ALSO] FileTest.#zero?
SEPARATOR_PAT -> Regexp
[permalink][rdoc]パス名のなかのディレクトリを区切る部分にマッチする正規表現です。
この値は環境依存です。
TO_PATH -> Symbol
[permalink][rdoc]内部的に使っている定数です。利用者が使うことはありません。