fileutils.rb

Copyright (c) 2000,2001 Minero Aoki <aamine@loveruby.net>

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

module FileUtils

基本的なファイル操作を集めたモジュールです。

モジュール関数

FileUtils#cd( [options,] dir )
FileUtils#cd( [options,] dir ) {|dir| .... }
Options = noop verbose

ディレクトリ dir に移動します。
イテレータとして呼ばれた時はブロック終了後に
元のディレクトリに戻ります。

  FileUtils.cd :verbose, '/'   # chdir and report it
FileUtils#pwd
FileUtils#getwd
カレントディレクトリの名前を返します。
Dir.pwd と同じです。

  FileUtils.chdir '/home/aamine'
  p FileUtils.pwd   # => "/home/aamine"
FileUtils#newest?( [options,] newer, older1, older2, ... )
FileUtils#uptodate?( [options,] newer, older1, older2, ... )
FileUtils#newer?( [options,] newer, older )
Options = verbose

newer が全ての older より新しいとき真。
存在しないファイルは無限に古いとみなされます。

  FileUtils.newest? 'hello.o', 'hello.c', 'hello.h' or system 'make'
FileUtils#mkdir( [options,] dir1, dir2, ... )
Options = noop verbose

ディレクトリ dir1、dir2 …を作成します。

  FileUtils.mkdir 'test'
  FileUtils.mkdir %w( tmp data )     # This method accepts arrays.
  FileUtils.mkdir :noop, 'notexist'  # does not create really
FileUtils#mkdir_p( [options,] dir1, dir2, ... )
FileUtils#mkpath( [options,] dir1, dir2, ... )
FileUtils#makedirs( [options,] dir1, dir2, ... )
Options = noop verbose

ディレクトリ dir1, dir2 …とその親ディレクトリを全て作成します。
例えば

  FileUtils.mkdir_p '/usr/local/lib/ruby'

は以下の全ディレクトリを(なければ)作成します。
    * /usr
    * /usr/local
    * /usr/local/bin
    * /usr/local/bin/ruby
FileUtils#ln( [options,] old, new )
FileUtils#link( [options,] old, new )
Options = noop verbose

old へのハードリンク new を作成します。
new がディレクトリなら new/old を作成します。

  FileUtils.ln :verbose, 'gcc', 'cc'
FileUtils#ln( [options,] file1, file2 ..., dir )
FileUtils#link( [options,] file1, file2 ..., dir )
Options = noop verbose

file1 へのハードリンク dir/file1、file2 へのハードリンク dir/file2 …
を作成します。

  FileUtils.ln 'cp', 'mv', 'mkdir', '/usr/bin'
  FileUtils.ln %w( cp mv mkdir ), '/usr/bin'    # same result
FileUtils#ln_s( [options,] old, new )
FileUtils#symlink( [options,] old, new )
Options = force noop verbose

old へのシンボリックリンク new を作成します。

  FileUtils.ln_s '/usr/bin/ruby', '/usr/local/bin/ruby'
  FileUtils.ln_s :force, 'verylongnamesourcefile.c', 'c'
FileUtils#ln_s( [options,] file1, file2 ..., dir )
FileUtils#symlink( [options,] file1, file2 ..., dir )
Options = force noop verbose

file1、file2 …へのシンボリックリンク dir/file1, dir/file2 …を
作成します。dir がディレクトリでない場合は例外 Errno::ENOTDIR が
発生します。また :force オプションがセットされている場合は、リンク
先にファイルが存在してもそれを削除してリンクを張ります。

 FileUtils.ln_s Dir.glob('bin/*.rb'), '/home/aamine/bin'
FileUtils#cp( [options,] src, dest )
FileUtils#copy( [options,] src, dest )
Options = preserve noop verbose

ファイル src を dest にコピーします。dest がディレクトリなら
dest/src にコピーします。

  FileUtils.cp 'eval.c', 'eval.c.org'
FileUtils#cp( [options,] file1, file2 ..., dir )
FileUtils#copy( [options,] file1, file2 ..., dir )
Options = preserve noop verbose

file1 を dir/file1 にコピー、file2 を dir/file2 にコピー、
というように、ディレクトリ dir の中にファイル file1、file2 …を
同じ名前でコピーします。dir がディレクトリでない場合は例外
Errno::ENOTDIR が発生します。

  FileUtils.cp 'cgi.rb', 'complex.rb', 'date.rb', '/usr/lib/ruby/1.6'
  FileUtils.cp :verbose, %w(cgi.rb complex.rb date.rb), '/usr/lib/ruby/1.6'
FileUtils#cp_r( [options,] src, dest )
Options = preserve noop verbose

src を dest にコピーします。src がディレクトリであったら再帰的に
コピーを行います。その際 dest がディレクトリなら dest/src に
コピーします。

  # installing ruby library "mylib" under the site_ruby
  FileUtils.rm_r :force, site_ruby + '/mylib'
  FileUtils.cp_r 'lib/', site_ruby + '/mylib'
FileUtils#cp_r( [options,] file1, file2 ..., dir )
Options = preserve noop verbose

file1、file2 …をディレクトリ dir の中にコピーします。
fileN がディレクトリなら再帰的にコピーします。

  FileUtils.cp_r 'mail.rb', 'field.rb', 'debug/', site_ruby + '/tmail'
  FileUtils.cp_r :noop, :verbose, Dir.glob('*.rb'), '/home/aamine/lib/ruby'
FileUtils#mv( [options,] src, dest )
FileUtils#move( [options,] src, dest )
Options = noop verbose

from を to に移動します。to がディレクトリなら to/from に
移動します。三つ以上の引数を与えたときはディレクトリ dir の
中にその他のファイルを移動します。

  FileUtils.mv 'badname.rb', 'goodname.rb'
  FileUtils.mv :verbose, 'stuff.rb', 'lib/ruby'
FileUtils#mv( [options,] file1, file2 ..., dir )
FileUtils#move( [options,] file1, file2 ..., dir )
Options = noop verbose

file1 file2 …を dir/file1 dir/file2 …に移動します。
パーティションをまたいで移動するときはコピーします。

  FileUtils.mv 'junk.txt', 'dust.txt', '/home/aamine/.trash/'
  FileUtils.mv :noop, :verbose, Dir.glob('test*.rb'), 'T'
FileUtils#rm( [options,] file1, file2, ... )
FileUtils#remove( [options,] file1, file2, ... )
Options = force noop verbose

file1、file2 …を消去します。:force オプションがセットされた
場合は作業中すべての例外を無視します。

  FileUtils.rm 'junk.txt', 'dust.txt'
  FileUtils.rm Dir['*.so'], Dir['*.o']   # all methods accepts array
  FileUtils.rm :force, 'NotExistFile'    # never raises error
FileUtils#rm_r( [options,] file1, file2, ... )
Options = force noop verbose

ファイルまたはディレクトリ file1, file2 …を消去します。
force オプションを渡した場合、途中で例外が発生しても無視します。

  FileUtils.rm_r Dir.glob('/tmp/*')
  FileUtils.rm_r :force, '/'          #  :-)
FileUtils#cmp( [options,] a, b )
FileUtils#identical?( [options,] a, b )
Options = verbose

ファイル a と b の内容が同じなら真。

  FileUtils.cmp 'somefile', 'somefile'  #=> true
  FileUtils.cmp '/bin/cp', '/bin/mv'    #=> maybe false.
FileUtils#install( [options,] src, dest, mode = <from's> )
Options = noop verbose

from と to の内容が違うときだけ from を to にコピーします。
そのさいモードを mode に設定します。

  FileUtils.install :verbose, 'ruby', '/usr/local/bin/ruby', 0755
  FileUtils.install :verbose, 'lib.rb', '/usr/local/lib/ruby/site_ruby'
FileUtils#update_file( [options,] dest, content )
Options = noop verbose

from と to の内容が違うときだけ from を to にコピーします。
そのさいモードを mode に設定します。

  FileUtils.update_file :verbose, 'index.html', content
FileUtils#chmod( [options,] mode, file1, file2, ... )
Options = noop verbose

file1 file2 …のモードを mode に変えます。
mode は八進数を使って chmod 0644, fname のように与えます。

  FileUtils.chmod 0644, 'my.rb', 'your.rb'
  FileUtils.chmod 0755, 'somecommand'
  FileUtils.chmod :verbose, 0755, '/usr/bin/ruby'
FileUtils#touch( [options,] file1, file2, .... )
Options = noop verbose

file1 file2 …の最終変更時刻とアクセス時刻を現在の時刻に
更新します。fileN が存在しない場合は同時に空のファイルを
作成します。

  FileUtils.touch 'main.c'; system 'make'

module FileUtils::Verbose

FileUtils と同じメソッドが定義されており全く同じ 動作をしますが、実行前にしようとしていることを表示します。

module FileUtils::NoWrite

FileUtils と同じメソッドが定義されていますが、 実際にファイルを変更する操作は実行しません。