Module: FileUtils (Ruby 2.2.4)
Description: Module : FileUtils - Ruby 2.2.4

- Home
- Core 2.2.4
- Std-lib 2.2.4
- Downloads

Support for the Ruby 2.2 series has ended. See here for reference.

### Home Classes Methods

### In Files

- rake/file_utils.rb

### Methods

- #ruby
- #safe_ln
- #sh
- #split_all

### Class/Module Index

Quicksearch

- FileUtils
- Module
- Object
- Pathname
- Rake::Application
- Rake::CompositePublisher
- Rake::DSL
- Rake::DefaultLoader
- Rake::EarlyTime
- Rake::FileCreationTask
- Rake::FileList
- Rake::FileTask
- Rake::FileUtilsExt
- Rake::InvocationChain
- Rake::InvocationChain::EmptyInvocationChain
- Rake::InvocationExceptionMixin
- Rake::LateTime
- Rake::LinkedList
- Rake::LinkedList::EmptyLinkedList
- Rake::MakefileLoader
- Rake::MultiTask
- Rake::NameSpace
- Rake::PackageTask
- Rake::PrivateReader
- Rake::RuleRecursionOverflowError
- Rake::Scope
- Rake::SshDirPublisher
- Rake::SshFilePublisher
- Rake::SshFreshDirPublisher
- Rake::Task
- Rake::TaskArgumentError
- Rake::TaskArguments
- Rake::TaskLib
- Rake::TaskManager
- Rake::TestTask
- Rake::Win32
- String

No matching classes.

# FileUtils

### Constants

LN_SUPPORTED
RUBY

  Path to the currently running Ruby program

### Public Instance Methods

ruby(*args, &block) click to toggle source

Run a Ruby interpreter with the given arguments.

Example:

    ruby %{-pe '$_.upcase!' <README}

                   # File rake/file_utils.rb, line 91
    def ruby(*args, &block)
      options = (Hash === args.last) ? args.pop : {}
      if args.length > 1
        sh(*([RUBY] + args + [options]), &block)
      else
        sh("#{RUBY} #{args.first}", options, &block)
      end
    end

safe_ln(*args) click to toggle source

Attempt to do a normal file link, but fall back to a copy if the link fails.

                   # File rake/file_utils.rb, line 104
    def safe_ln(*args)
      if ! LN_SUPPORTED[0]
        cp(*args)
      else
        begin
          ln(*args)
        rescue StandardError, NotImplementedError
          LN_SUPPORTED[0] = false
          cp(*args)
        end
      end
    end

sh(*cmd, &block) click to toggle source

Run the system command `cmd`. If multiple arguments are given the command is run directly (without the shell, same semantics as Kernel::exec and Kernel::system).

It is recommended you use the multiple argument form over interpolating user input for both usability and security reasons. With the multiple argument form you can easily process files with spaces or other shell reserved characters in them. With the multiple argument form your rake tasks are not vulnerable to users providing an argument like `; rm # -rf /`.

If a block is given, upon command completion the block is called with an OK flag (true on a zero exit status) and a Process::Status object. Without a block a RuntimeError is raised when the command exits non-zero.

Examples:

    sh 'ls -ltr'

    sh 'ls', 'file with spaces'

    # check exit status after command runs
    sh %{grep pattern file} do |ok, res|
      if ! ok
        puts "pattern not found (status = #{res.exitstatus})"
      end
    end

                   # File rake/file_utils.rb, line 45
    def sh(*cmd, &block)
      options = (Hash === cmd.last) ? cmd.pop : {}
      shell_runner = block_given? ? block : create_shell_runner(cmd)
      set_verbose_option(options)
      options[:noop] ||= Rake::FileUtilsExt.nowrite_flag
      Rake.rake_check_options options, :noop, :verbose
      Rake.rake_output_message cmd.join(" ") if options[:verbose]

      unless options[:noop]
        res = rake_system(*cmd)
        status = $?
        status = Rake::PseudoStatus.new(1) if !res && status.nil?
        shell_runner.call(res, status)
      end
    end

split_all(path) click to toggle source

Split a file path into individual directory names.

Example:

    split_all("a/b/c") =>  ['a', 'b', 'c']

                   # File rake/file_utils.rb, line 122
    def split_all(path)
      head, tail = File.split(path)
      return [tail] if head == '.' || tail == '/'
      return [head, tail] if head == '/'
      return split_all(head) + [tail]
    end