Top Level Namespace
Defined Under Namespace
Modules: FileUtils
Instance Method Summary collapse
-
#chmod ⇒ Object
Change the mode of each FILE to OCTAL-MODE.
-
#cp ⇒ Object
Copy SOURCE to DEST, or multiple SOURCE(s) to DIRECTORY.
-
#help ⇒ Object
Display help message.
-
#httpd ⇒ Object
Run WEBrick HTTP server.
-
#install ⇒ Object
Copy SOURCE to DEST.
-
#ln ⇒ Object
Create a link to the specified TARGET with LINK_NAME.
-
#mkdir ⇒ Object
Create the DIR, if they do not already exist.
-
#mkmf ⇒ Object
Create makefile using mkmf.
-
#mv ⇒ Object
Rename SOURCE to DEST, or move SOURCE(s) to DIRECTORY.
-
#rm ⇒ Object
Remove the FILE.
-
#rmdir ⇒ Object
Remove the DIR.
- #setup(options = "", *long_options) {|argv, opt_hash| ... } ⇒ Object
-
#touch ⇒ Object
Update the access and modification times of each FILE to the current time.
-
#wait_writable ⇒ Object
Wait until the file becomes writable.
Instance Method Details
#chmod ⇒ Object
Change the mode of each FILE to OCTAL-MODE.
ruby -run -e chmod -- [OPTION] OCTAL-MODE FILE
-v verbose
206 207 208 209 210 211 |
# File 'lib/un.rb', line 206 def chmod setup do |argv, | mode = argv.shift.oct FileUtils.chmod mode, argv, end end |
#cp ⇒ Object
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
77 78 79 80 81 82 83 84 85 86 |
# File 'lib/un.rb', line 77 def cp setup("pr") do |argv, | cmd = "cp" cmd += "_r" if .delete :r [:preserve] = true if .delete :p dest = argv.pop argv = argv[0] if argv.size == 1 FileUtils.send cmd, argv, dest, end end |
#help ⇒ Object
Display help message.
ruby -run -e help [COMMAND]
336 337 338 339 340 341 342 343 344 345 346 347 348 349 |
# File 'lib/un.rb', line 336 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 |
#httpd ⇒ Object
Run WEBrick HTTP server.
ruby -run -e httpd -- [OPTION] DocumentRoot
--bind-address=ADDR address to bind
--port=NUM listening port number
--max-clients=MAX max number of simultaneous clients
--temp-dir=DIR temporary directory
--do-not-reverse-lookup disable reverse lookup
--request-timeout=SECOND request timeout in seconds
--http-version=VERSION HTTP version
-v verbose
305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 |
# File 'lib/un.rb', line 305 def httpd setup("", "BindAddress=ADDR", "Port=PORT", "MaxClients=NUM", "TempDir=DIR", "DoNotReverseLookup", "RequestTimeout=SECOND", "HTTPVersion=VERSION") do |argv, | require 'webrick' opt = [:RequestTimeout] and [:RequestTimeout] = opt.to_i [:Port, :MaxClients].each do |name| opt = [name] and ([name] = Integer(opt)) rescue nil end unless argv.size == 1 raise ArgumentError, "DocumentRoot is mandatory" end [:DocumentRoot] = argv.shift s = WEBrick::HTTPServer.new() shut = proc {s.shutdown} siglist = %w"TERM QUIT" siglist.concat(%w"HUP INT") if STDIN.tty? siglist &= Signal.list.keys siglist.each do |sig| Signal.trap(sig, shut) end s.start end end |
#install ⇒ Object
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
188 189 190 191 192 193 194 195 196 |
# File 'lib/un.rb', line 188 def install setup("pm:") do |argv, | [:mode] = (mode = .delete :m) ? mode.oct : 0755 [:preserve] = true if .delete :p dest = argv.pop argv = argv[0] if argv.size == 1 FileUtils.install argv, dest, end end |
#ln ⇒ Object
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
98 99 100 101 102 103 104 105 106 107 |
# File 'lib/un.rb', line 98 def ln setup("sf") do |argv, | cmd = "ln" cmd += "_s" if .delete :s [:force] = true if .delete :f dest = argv.pop argv = argv[0] if argv.size == 1 FileUtils.send cmd, argv, dest, end end |
#mkdir ⇒ Object
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
153 154 155 156 157 158 159 |
# File 'lib/un.rb', line 153 def mkdir setup("p") do |argv, | cmd = "mkdir" cmd += "_p" if .delete :p FileUtils.send cmd, argv, end end |
#mkmf ⇒ Object
Create makefile using mkmf.
ruby -run -e mkmf -- [OPTION] EXTNAME [OPTION]
-d ARGS run dir_config
-h ARGS run have_header
-l ARGS run have_library
-f ARGS run have_func
-v ARGS run have_var
-t ARGS run have_type
-m ARGS run have_macro
-c ARGS run have_const
--vendor install to vendor_ruby
274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 |
# File 'lib/un.rb', line 274 def mkmf setup("d:h:l:f:v:t:m:c:", "vendor") do |argv, | require 'mkmf' opt = [:d] and opt.split(/:/).each {|n| dir_config(*n.split(/,/))} opt = [:h] and opt.split(/:/).each {|n| have_header(*n.split(/,/))} opt = [:l] and opt.split(/:/).each {|n| have_library(*n.split(/,/))} opt = [:f] and opt.split(/:/).each {|n| have_func(*n.split(/,/))} opt = [:v] and opt.split(/:/).each {|n| have_var(*n.split(/,/))} opt = [:t] and opt.split(/:/).each {|n| have_type(*n.split(/,/))} opt = [:m] and opt.split(/:/).each {|n| have_macro(*n.split(/,/))} opt = [:c] and opt.split(/:/).each {|n| have_const(*n.split(/,/))} $configure_args["--vendor"] = true if [:vendor] create_makefile(*argv) end end |
#mv ⇒ Object
Rename SOURCE to DEST, or move SOURCE(s) to DIRECTORY.
ruby -run -e mv -- [OPTION] SOURCE DEST
-v verbose
117 118 119 120 121 122 123 |
# File 'lib/un.rb', line 117 def mv setup do |argv, | dest = argv.pop argv = argv[0] if argv.size == 1 FileUtils.mv argv, dest, end end |
#rm ⇒ Object
Remove the FILE
ruby -run -e rm -- [OPTION] FILE
-f ignore nonexistent files
-r remove the contents of directories recursively
-v verbose
135 136 137 138 139 140 141 142 |
# File 'lib/un.rb', line 135 def rm setup("fr") do |argv, | cmd = "rm" cmd += "_r" if .delete :r [:force] = true if .delete :f FileUtils.send cmd, argv, end end |
#rmdir ⇒ Object
Remove the DIR.
ruby -run -e rmdir -- [OPTION] DIR
-p remove DIRECTORY and its ancestors.
-v verbose
170 171 172 173 174 175 |
# File 'lib/un.rb', line 170 def rmdir setup("p") do |argv, | [:parents] = true if .delete :p FileUtils.rmdir argv, end end |
#setup(options = "", *long_options) {|argv, opt_hash| ... } ⇒ Object
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
# File 'lib/un.rb', line 35 def setup( = "", *) opt_hash = {} argv = [] OptionParser.new do |o| .scan(/.:?/) do |s| opt_name = s.delete(":").intern o.on("-" + s.tr(":", " ")) do |val| opt_hash[opt_name] = val end end .each do |s| opt_name, arg_name = s.split(/(?=[\s=])/, 2) opt_name.sub!(/\A--/, '') s = "--#{opt_name.gsub(/([A-Z]+|[a-z])([A-Z])/, '\1-\2').downcase}#{arg_name}" puts "#{opt_name}=>#{s}" if $DEBUG opt_name = opt_name.intern o.on(s) do |val| opt_hash[opt_name] = val end end o.on("-v") do opt_hash[:verbose] = true end o.order!(ARGV) do |x| if /[*?\[{]/ =~ x argv.concat(Dir[x]) else argv << x end end end yield argv, opt_hash end |
#touch ⇒ Object
Update the access and modification times of each FILE to the current time.
ruby -run -e touch -- [OPTION] FILE
-v verbose
221 222 223 224 225 |
# File 'lib/un.rb', line 221 def touch setup do |argv, | FileUtils.touch argv, end end |
#wait_writable ⇒ Object
Wait until the file becomes writable.
ruby -run -e wait_writable -- [OPTION] FILE
-n RETRY count to retry
-w SEC each wait time in seconds
-v verbose
237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 |
# File 'lib/un.rb', line 237 def wait_writable setup("n:w:v") do |argv, | verbose = [:verbose] n = [:n] and n = Integer(n) wait = (wait = [:w]) ? Float(wait) : 0.2 argv.each do |file| begin open(file, "r+b") rescue Errno::ENOENT break rescue Errno::EACCES => e raise if n and (n -= 1) <= 0 puts e STDOUT.flush sleep wait retry end end end end |