Type:
Class

Pathname represents the name of a file or directory on the filesystem, but not the file itself.

The pathname depends on the Operating System: Unix, Windows, etc. This library works with pathnames of local OS, however non-Unix pathnames are supported experimentally.

A Pathname can be relative or absolute. It's not until you try to reference the file that it even matters whether the file exists or not.

Pathname is immutable. It has no method for destructive update.

The goal of this class is to manipulate file path information in a neater way than standard Ruby provides. The examples below demonstrate the difference.

All functionality from File, FileTest, and some from Dir and FileUtils is included, in an unsurprising way. It is essentially a facade for all of these, and more.

Examples

Example 1: Using Pathname

1
2
3
4
5
6
7
8
9
10
require 'pathname'
pn = Pathname.new("/usr/bin/ruby")
size = pn.size              # 27662
isdir = pn.directory?       # false
dir  = pn.dirname           # Pathname:/usr/bin
base = pn.basename          # Pathname:ruby
dir, base = pn.split        # [Pathname:/usr/bin, Pathname:ruby]
data = pn.read
pn.open { |f| _ }
pn.each_line { |line| _ }

Example 2: Using standard Ruby

1
2
3
4
5
6
7
8
9
pn = "/usr/bin/ruby"
size = File.size(pn)        # 27662
isdir = File.directory?(pn) # false
dir  = File.dirname(pn)     # "/usr/bin"
base = File.basename(pn)    # "ruby"
dir, base = File.split(pn)  # ["/usr/bin", "ruby"]
data = File.read(pn)
File.open(pn) { |f| _ }
File.foreach(pn) { |line| _ }

Example 3: Special features

1
2
3
4
5
6
7
8
9
10
11
p1 = Pathname.new("/usr/lib")   # Pathname:/usr/lib
p2 = p1 + "ruby/1.8"            # Pathname:/usr/lib/ruby/1.8
p3 = p1.parent                  # Pathname:/usr
p4 = p2.relative_path_from(p3)  # Pathname:lib/ruby/1.8
pwd = Pathname.pwd              # Pathname:/home/gavin
pwd.absolute?                   # true
p5 = Pathname.new "."           # Pathname:.
p5 = p5 + "music/../articles"   # Pathname:music/../articles
p5.cleanpath                    # Pathname:articles
p5.realpath                     # Pathname:/home/gavin/articles
p5.children                     # [Pathname:/home/gavin/articles/linux, ...]

Breakdown of functionality

Core methods

These methods are effectively manipulating a String, because that's all a path is. None of these access the file system except for mountpoint?, children, each_child, realdirpath and realpath.

File status predicate methods

These methods are a facade for FileTest:

File property and manipulation methods

These methods are a facade for File:

Directory methods

These methods are a facade for Dir:

IO

These methods are a facade for IO:

Utilities

These methods are a mixture of Find, FileUtils, and others:

Method documentation

As the above section shows, most of the methods in Pathname are facades. The documentation for these methods generally just says, for instance, “See FileTest#writable?”, as you should be familiar with the original method anyway, and its documentation (e.g. through ri) will contain more information. In some cases, a brief description will follow.

open
  • References/Ruby on Rails/Ruby/Classes/Pathname

open(p1 = v1, p2 = v2, p3 = v3) Instance Public methods Opens the file for reading

2025-01-10 15:47:30
eql?
  • References/Ruby on Rails/Ruby/Classes/Pathname

eql?(p1) Instance Public methods Compare this pathname with other

2025-01-10 15:47:30
sub_ext
  • References/Ruby on Rails/Ruby/Classes/Pathname

sub_ext(p1) Instance Public methods Return a pathname with repl

2025-01-10 15:47:30
each_child
  • References/Ruby on Rails/Ruby/Classes/Pathname

each_child(with_directory=true, &b) Instance Public methods Iterates over

2025-01-10 15:47:30
to_path
  • References/Ruby on Rails/Ruby/Classes/Pathname

pathname.to_path â string Instance Public methods Return the path as

2025-01-10 15:47:30
extname
  • References/Ruby on Rails/Ruby/Classes/Pathname

extname() Instance Public methods Returns the file's extension.

2025-01-10 15:47:30
make_link
  • References/Ruby on Rails/Ruby/Classes/Pathname

pathname.make_link(old) Instance Public methods Creates a hard link at pathname

2025-01-10 15:47:30
mkpath
  • References/Ruby on Rails/Ruby/Classes/Pathname

mkpath() Instance Public methods Creates a full path, including any intermediate

2025-01-10 15:47:30
fnmatch?
  • References/Ruby on Rails/Ruby/Classes/Pathname

pathname.fnmatch?(pattern, [flags]) â string Instance Public methods Return

2025-01-10 15:47:30
symlink?
  • References/Ruby on Rails/Ruby/Classes/Pathname

symlink?() Instance Public methods See

2025-01-10 15:47:30