optparse が使いやすすぎるので調子に乗って mkdir 書いてみた
エンコードがアレだけど、書いてみた。
--mode 実装してないけどね!
#!c:/bin/ruby/bin/ruby # -*- encoding: shift_jis -*- # mkdir.rb require 'optparse' Encoding.default_external = Encoding::Shift_JIS Encoding.default_internal = Encoding::Shift_JIS opt = OptionParser.new OPT = {} PROGRAM_NAME = File.basename( $0, ".*" ) opt.on( "-m MODE", "--mode=MODE", "ディレクトリのモードを設定します。" ) do |mode| OPT[:mode] = mode end opt.on( "-p", "--parents", "指定したディレクトリをサブディレクトリごと作成します。" ) do |parents| OPT[:parents] = parents end opt.on( "-v", "--verbose", "ディレクトリを作成するごとに標準出力に表示します。" ) do |verbose| OPT[:verbose] = verbose end opt.parse!( ARGV ) def directory_already_exists(path) $stderr.puts "#{PROGRAM_NAME}: ディレクトリを作成できませんでした。 `#{path}' はすでに存在します。" end def such_directory_not_exists(path) $stderr.puts "#{PROGRAM_NAME}: ディレクトリを作成できませんでした。 `#{path}' のようなファイルまたはディレクトリは存在しません。" exit end def on_error_when_creating(path, err) p err begin message = err.message.encode( 'shift_jis' ) rescue $stderr.puts "#{PROGRAM_NAME}: `#{path}' の作成に失敗しました。" else $stderr.puts "#{PROGRAM_NAME}: #{err} `#{path}' の作成に失敗しました。" end end def on_created(path) $stdout.puts "#{PROGRAM_NAME}: ディレクトリを作成しました。 `#{path}'" if OPT.has_key? :verbose end def create_directory(path, element) path.encode!( 'shift_jis' ) begin Dir.mkdir path rescue => e on_error_when_creating element, e else on_created element end end ARGV.each do |element| fullpath = File.expand_path( element ) if File.exists? fullpath then directory_already_exists element end dirs = fullpath.split( /\// ) currents = Dir.pwd.split( /\// ) bases = dirs & currents dirs = dirs - bases base_path = bases.join( '/' ) if dirs.length == 1 then create_directory "#{base_path}/#{dirs.first}", element else if OPT.has_key? :parents then make_path = "#{base_path}/" dirs.each do |dir| make_path += "#{dir}/" create_directory( make_path, element ) unless File.exists? make_path end else such_directory_not_exists element end end end