un.rb

Path: un.rb
Last Update: Sun Aug 03 19:32:23 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

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

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

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

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

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

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

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

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

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

[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

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

[Validate]