Changes the current working directory of the process to the given string. When called without an argument, changes the directory to the value of the environment variable HOME
, or LOGDIR
. SystemCallError
(probably Errno::ENOENT) if the target directory does not exist.
If a block is given, it is passed the name of the new current directory, and the block is executed with that as the current directory. The original working directory is restored when the block exits. The return value of chdir
is the value of the block. chdir
blocks can be nested, but in a multi-threaded program an error will be raised if a thread attempts to open a chdir
block while another thread has one open or a call to chdir
without a block occurs inside a block passed to chdir
(even in the same thread).
Dir.chdir("/var/spool/mail") puts Dir.pwd Dir.chdir("/tmp") do puts Dir.pwd Dir.chdir("/usr") do puts Dir.pwd end puts Dir.pwd end puts Dir.pwd
produces:
/var/spool/mail /tmp /usr /tmp /var/spool/mail
Objects of class Dir
are directory streams representing directories in the underlying file system. They provide a variety of ways to list directories and their contents. See also File
.
The directory used in these examples contains the two regular files (config.h
and main.rb
), the parent directory (..
), and the directory itself (.
).
First, what’s elsewhere. Class Dir:
Inherits from class Object.
Includes module Enumerable, which provides dozens of additional methods.
Here, class Dir provides methods that are useful for:
close
: Closes the directory stream for self
.
pos=
: Sets the position in the directory stream for self
.
read
: Reads and returns the next entry in the directory stream for self
.
rewind
: Sets the position in the directory stream for self
to the first entry.
seek
: Sets the position in the directory stream for self
the entry at the given offset.
::chdir
: Changes the working directory of the current process to the given directory.
::chroot
: Changes the file-system root for the current process to the given directory.
::children
: Returns an array of names of the children (both files and directories) of the given directory, but not including .
or ..
.
::empty?
: Returns whether the given path is an empty directory.
::entries
: Returns an array of names of the children (both files and directories) of the given directory, including .
and ..
.
::exist?
: Returns whether the given path is a directory.
::getwd
(aliased as pwd): Returns the path to the current working directory.
::glob
: Returns an array of file paths matching the given pattern and flags.
::home
: Returns the home directory path for a given user or the current user.
children
: Returns an array of names of the children (both files and directories) of self
, but not including .
or ..
.
fileno
: Returns the integer file descriptor for self
.
path
(aliased as to_path
): Returns the path used to create self
.
tell
(aliased as pos
): Returns the integer position in the directory stream for self
.
::each_child
: Calls the given block with each entry in the given directory, but not including .
or ..
.
::foreach
: Calls the given block with each entry in the given directory, including .
and ..
.
each
: Calls the given block with each entry in self
, including .
and ..
.
each_child
: Calls the given block with each entry in self
, but not including .
or ..
.
::mkdir
: Creates a directory at the given path, with optional permissions.
::new
: Returns a new Dir for the given path, with optional encoding.
::open
: Same as ::new
, but if a block is given, yields the Dir to the block, closing it upon block exit.
::unlink
(aliased as ::delete
and ::rmdir
): Removes the given directory.
inspect
: Returns a string description of self
.
Makes a new directory named by string, with permissions specified by the optional parameter anInteger. The permissions may be modified by the value of File::umask
, and are ignored on NT. Raises a SystemCallError
if the directory cannot be created. See also the discussion of permissions in the class documentation for File
.
Dir.mkdir(File.join(Dir.home, ".foo"), 0700) #=> 0
Deletes the named directory. Raises a subclass of SystemCallError
if the directory isn’t empty.
Returns the operating system’s temporary file path.
Dir.mktmpdir
creates a temporary directory.
The directory is created with 0700 permission. Application should not change the permission to make the temporary directory accessible from other users.
The prefix and suffix of the name of the directory is specified by the optional first argument, prefix_suffix.
If it is not specified or nil, “d” is used as the prefix and no suffix is used.
If it is a string, it is used as the prefix and no suffix is used.
If it is an array, first element is used as the prefix and second element is used as a suffix.
Dir.mktmpdir {|dir| dir is ".../d..." } Dir.mktmpdir("foo") {|dir| dir is ".../foo..." } Dir.mktmpdir(["foo", "bar"]) {|dir| dir is ".../foo...bar" }
The directory is created under Dir.tmpdir
or the optional second argument tmpdir if non-nil value is given.
Dir.mktmpdir {|dir| dir is "#{Dir.tmpdir}/d..." } Dir.mktmpdir(nil, "/var/tmp") {|dir| dir is "/var/tmp/d..." }
If a block is given, it is yielded with the path of the directory. The directory and its contents are removed using FileUtils.remove_entry
before Dir.mktmpdir
returns. The value of the block is returned.
Dir.mktmpdir {|dir| # use the directory... open("#{dir}/foo", "w") { something using the file } }
If a block is not given, The path of the directory is returned. In this case, Dir.mktmpdir
doesn’t remove the directory.
dir = Dir.mktmpdir begin # use the directory... open("#{dir}/foo", "w") { something using the file } ensure # remove the directory. FileUtils.remove_entry dir end
Returns the canonicalized absolute path of the directory of the file from which this method is called. It means symlinks in the path is resolved. If __FILE__
is nil
, it returns nil
. The return value equals to File.dirname(File.realpath(__FILE__))
.
The path where gems are to be installed.
Calls the block once for each entry in the named directory, passing the filename of each entry as a parameter to the block.
If no block is given, an enumerator is returned instead.
Dir.foreach("testdir") {|x| puts "Got #{x}" }
produces:
Got . Got .. Got config.h Got main.rb
Returns an array containing all of the filenames except for “.” and “..” in the given directory. Will raise a SystemCallError
if the named directory doesn’t exist.
The optional encoding keyword argument specifies the encoding of the directory. If not specified, the filesystem encoding is used.
Dir.children("testdir") #=> ["config.h", "main.rb"]
Calls the block once for each entry in this directory, passing the filename of each entry as a parameter to the block.
If no block is given, an enumerator is returned instead.
d = Dir.new("testdir") d.each {|x| puts "Got #{x}" }
produces:
Got . Got .. Got config.h Got main.rb
Returns an array containing all of the filenames except for “.” and “..” in this directory.
d = Dir.new("testdir") d.children #=> ["config.h", "main.rb"]
Changes this process’s idea of the file system root. Only a privileged process may make this call. Not available on all platforms. On Unix systems, see chroot(2)
for more information.
Recursively removes the directory entry given by path
, which should be the entry for a regular file, a symbolic link, or a directory.
Argument path
should be interpretable as a path.
Optional argument force
specifies whether to ignore raised exceptions of StandardError
and its descendants.
Related: methods for deleting.
Recursively removes the directory entry given by path
, which should be the entry for a regular file, a symbolic link, or a directory.
Argument path
should be interpretable as a path.
Optional argument force
specifies whether to ignore raised exceptions of StandardError
and its descendants.
Related: methods for deleting.
Sets a target
name that the user can then use to configure various “with” options with on the command line by using that name. For example, if the target is set to “foo”, then the user could use the --with-foo-dir=prefix
, --with-foo-include=dir
and --with-foo-lib=dir
command line options to tell where to search for header/library files.
You may pass along additional parameters to specify default values. If one is given it is taken as default prefix
, and if two are given they are taken as “include” and “lib” defaults in that order.
In any case, the return value will be an array of determined “include” and “lib” directories, either of which can be nil if no corresponding command line option is given when no default value is specified.
Note that dir_config
only adds to the list of places to search for libraries and include files. It does not link the libraries into your application.
Default home directory path to be used if an alternate value is not specified in the environment
Path for gems in the user’s home directory
SyntaxSuggest.record_dir
[Private]
Used to generate a unique directory to record search steps for debugging
Calls the block once for each entry except for “.” and “..” in the named directory, passing the filename of each entry as a parameter to the block.
If no block is given, an enumerator is returned instead.
Dir.each_child("testdir") {|x| puts "Got #{x}" }
produces:
Got config.h Got main.rb
Calls the block once for each entry except for “.” and “..” in this directory, passing the filename of each entry as a parameter to the block.
If no block is given, an enumerator is returned instead.
d = Dir.new("testdir") d.each_child {|x| puts "Got #{x}" }
produces:
Got config.h Got main.rb
Returns an array containing all of the filenames in the given directory. Will raise a SystemCallError
if the named directory doesn’t exist.
The optional encoding keyword argument specifies the encoding of the directory. If not specified, the filesystem encoding is used.
Dir.entries("testdir") #=> [".", "..", "config.h", "main.rb"]
Returns the file descriptor used in dir.
d = Dir.new("..") d.fileno #=> 8
This method uses dirfd() function defined by POSIX 2008. NotImplementedError
is raised on other platforms, such as Windows, which doesn’t provide the function.