# un.rb

Path: | un.rb
Last Update: | Mon Aug 04 02:24:16 GMT+10:00 2003

# un.rb

Copyright © 2003 WATANABE Hirofumi <eban@ruby-lang.org>

This program is free software. You can distribute/modify this program under the same terms of Ruby.

## Utilities to replace common UNIX commands in Makefiles etc

## SYNOPSIS

      ruby -run -e cp -- [OPTION] SOURCE DEST
      ruby -run -e ln -- [OPTION] TARGET LINK_NAME
      ruby -run -e mv -- [OPTION] SOURCE DEST
      ruby -run -e rm -- [OPTION] FILE
      ruby -run -e mkdir -- [OPTION] DIRS
      ruby -run -e rmdir -- [OPTION] DIRS
      ruby -run -e install -- [OPTION] SOURCE DEST
      ruby -run -e chmod -- [OPTION] OCTAL-MODE FILE
      ruby -run -e touch -- [OPTION] FILE
      ruby -run -e help [COMMAND]

## Required files

fileutils getopts

## Methods

chmod cp help install ln mkdir mv rm rmdir setup touch

## Classes and Modules

Module FileUtils

## Public Instance methods

setup(options = "") {|ARGV, options, $OPT| ...}

[Source]

    # File un.rb, line 32
    def setup(options = "")
      options += "v"
      ARGV.map! do |x|
        case x
        when /^-/
          x.delete "^-#{options}"
        when /[*?\[{]/
          Dir[x]
        else
          x
        end
      end
      ARGV.flatten!
      ARGV.delete_if{|x| x == '-'}
      getopts(options)
      options = {}
      options[:verbose] = true if $OPT["v"]
      options[:force] = true if $OPT["f"]
      options[:preserve] = true if $OPT["p"]
      yield ARGV, options, $OPT
    end

cp()

Copy SOURCE to DEST, or multiple SOURCE(s) to DIRECTORY

      ruby -run -e cp -- [OPTION] SOURCE DEST

      -p          preserve file attributes if possible
      -r          copy recursively
      -v          verbose

[Source]

    # File un.rb, line 64
    def cp
      setup("pr") do |argv, options, opt|
        cmd = "cp"
        cmd += "_r" if opt["r"]
        dest = argv.pop
        argv = argv[0] if argv.size == 1
        FileUtils.send cmd, argv, dest, options
      end
    end

ln()

Create a link to the specified TARGET with LINK_NAME.

      ruby -run -e ln -- [OPTION] TARGET LINK_NAME

      -s          make symbolic links instead of hard links
      -f          remove existing destination files
      -v          verbose

[Source]

    # File un.rb, line 84
    def ln
      setup("sf") do |argv, options, opt|
        cmd = "ln"
        cmd += "_s" if opt["s"]
        dest = argv.pop
        argv = argv[0] if argv.size == 1
        FileUtils.send cmd, argv, dest, options
      end
    end

mv()

Rename SOURCE to DEST, or move SOURCE(s) to DIRECTORY.

      ruby -run -e mv -- [OPTION] SOURCE DEST

      -v          verbose

[Source]

    # File un.rb, line 102
    def mv
      setup do |argv, options|
        dest = argv.pop
        argv = argv[0] if argv.size == 1
        FileUtils.mv argv, dest, options
      end
    end

rm()

Remove the FILE

      ruby -run -e rm -- [OPTION] FILE

      -f          ignore nonexistent files
      -r          remove the contents of directories recursively
      -v          verbose

[Source]

    # File un.rb, line 120
    def rm
      setup("fr") do |argv, options, opt|
        cmd = "rm"
        cmd += "_r" if opt["r"]
        FileUtils.send cmd, argv, options
      end
    end

mkdir()

Create the DIR, if they do not already exist.

      ruby -run -e mkdir -- [OPTION] DIR

      -p          no error if existing, make parent directories as needed
      -v          verbose

[Source]

    # File un.rb, line 137
    def mkdir
      setup("p") do |argv, options, opt|
        cmd = "mkdir"
        cmd += "_p" if options.delete :preserve
        FileUtils.send cmd, argv, options
      end
    end

rmdir()

Remove the DIR.

      ruby -run -e rmdir -- [OPTION] DIR

      -v          verbose

[Source]

    # File un.rb, line 153
    def rmdir
      setup do |argv, options|
        FileUtils.rmdir argv, options
      end
    end

install()

Copy SOURCE to DEST.

      ruby -run -e install -- [OPTION] SOURCE DEST

      -p          apply access/modification times of SOURCE files to
                  corresponding destination files
      -m          set permission mode (as in chmod), instead of 0755
      -v          verbose

[Source]

    # File un.rb, line 170
    def install
      setup("pm:") do |argv, options, opt|
        options[:mode] = opt["m"] ? opt["m"].oct : 0755
        dest = argv.pop
        argv = argv[0] if argv.size == 1
        FileUtils.install argv, dest, options
      end
    end

chmod()

Change the mode of each FILE to OCTAL-MODE.

      ruby -run -e chmod -- [OPTION] OCTAL-MODE FILE

      -v          verbose

[Source]

    # File un.rb, line 187
    def chmod
      setup do |argv, options|
        mode = argv.shift.oct
        FileUtils.chmod mode, argv, options
      end
    end

touch()

Update the access and modification times of each FILE to the current time.

      ruby -run -e touch -- [OPTION] FILE

      -v          verbose

[Source]

    # File un.rb, line 202
    def touch
      setup do |argv, options|
        FileUtils.touch argv, options
      end
    end

help()

Display help message.

      ruby -run -e help [COMMAND]

[Source]

    # File un.rb, line 214
    def help
      setup do |argv,|
        all = argv.empty?
        open(__FILE__) do |me|
          while me.gets("##\n")
            if help = me.gets("\n\n")
              if all or argv.delete help[/-e \w+/].sub(/-e /, "")
                print help.gsub(/^# ?/, "")
              end
            end
          end
        end
      end
    end

[Validate]