# fileutils.rb

ruby 1.7 feature

## module FileUtils

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

### モジュール関数

`FileUtils.cd( dir, *options )`
`FileUtils.cd( dir, *options ) {|dir| .... }`

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

  option で指定可能なのは :noop と :verbose です。

      FileUtils.cd('/', {:verbose => true})   # chdir and report it

`FileUtils.chmod( mode, list, *options )`

  ファイル LIST[0]、LIST[1] …のパーミッションを mode に変えます。

  option で指定可能なのは :noop と :verbose です。

      FileUtils.chmod(0644, 'my.rb', 'your.rb')
      FileUtils.chmod(0755, 'somecommand')
      FileUtils.chmod(0755, '/usr/bin/ruby', {:verbose => true})

`FileUtils.chown(user, group, list, options = {})`

  ruby 1.9 feature

      FileUtils.chown 'root', 'staff', '/usr/local/bin/ruby'
      FileUtils.chown nil, 'bin', Dir.glob('/usr/bin/*'), :verbose => true

`FileUtils.chown_R(user, group, list, options = {})`

  ruby 1.9 feature

      FileUtils.chown_R 'www', 'www', '/var/www/htdocs'
      FileUtils.chown_R 'cvs', 'cvs', '/var/cvs', :verbose => true

`FileUtils.cmp( file_a, file_b, *options )`
`FileUtils.compare_file( file_a, file_b, *options )`
`FileUtils.identical?( file_a, file_b, *options )`

  ファイル a と b の内容が同じなら真。option で指定可能なのは :verbose です。

      FileUtils.cmp('somefile', 'somefile')  #=> true
      FileUtils.cmp('/bin/cp', '/bin/mv')    #=> maybe false.

`FileUtils.compare_stream(a, b)`

  IO オブジェクト a と b の内容が同じなら真を返します。

`FileUtils.copy_entry(src, dest, preserve = false, dereference = false)`

  ruby 1.9 feature

  執筆者募集

`FileUtils.copy_file(src, dest, preserve = false, dereference = true)`

  ruby 1.9 feature

  執筆者募集

`FileUtils.copy_stream(src, dest)`

  ruby 1.9 feature

  src を dest にコピーします。 src には read メソッド、dest には write メソッドが必要です。

`FileUtils.cp( src, dest, *options )`
`FileUtils.copy( src, dest, *options )`

  ファイル src を dest にコピーします。dest がディレクトリなら dest/src にコピーします。dest が既に存在ししかもディレクトリで ないときは上書きします。

  option で指定可能なのは :preserve, :noop と :verbose です。

      FileUtils.cp 'eval.c', 'eval.c.org'

`FileUtils.cp( list, dir, *options )`

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

  option で指定可能なのは :preserve, :noop と :verbose です。

      FileUtils.cp('cgi.rb', 'complex.rb', 'date.rb', '/usr/lib/ruby/1.6')
      FileUtils.cp(%w(cgi.rb complex.rb date.rb), '/usr/lib/ruby/1.6', {:verbose => true})

`FileUtils.cp_r( src, dest, *options )`

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

  option で指定可能なのは :preserve, :noop と :verbose です。

      # installing ruby library "mylib" under the site_ruby
      FileUtils.rm_r(site_ruby + '/mylib', {:force => true})
      FileUtils.cp_r('lib/', site_ruby + '/mylib')

`FileUtils.cp_r( list, dir, *options )`

  list[0]、list[1], list[2], …をディレクトリ dir の中にコピーします。 list[n] がディレクトリなら再帰的にコピーします。

  option で指定可能なのは :preserve, :noop と :verbose です。

      FileUtils.cp_r(%w(mail.rb field.rb debug/), site_ruby + '/tmail')
      FileUtils.cp_r(Dir.glob('*.rb'), '/home/aamine/lib/ruby'
                                     ,{:noop => true, :verbose => true})

`FileUtils.install( src, dest, *options )`

  src と dest の内容が違うときだけ src を dest にコピーします。

  option で指定可能なのは :noop と :verbose と :mode です。:mode はコピー先ファイルに設定するモードです。

      FileUtils.install('ruby', '/usr/local/bin/ruby', {:mode => 0755, :verbose => true})
      FileUtils.install('lib.rb', '/usr/local/lib/ruby/site_ruby'
                                , {:verbose => true})

`FileUtils.ln( old, new, *options )`
`FileUtils.link( old, new, *options )`

  old へのハードリンク new を作成します。 new がすでに存在しディレクトリであるときは new/old を作成します。 new がすでに存在しディレクトリでないならば例外 Errno::ENOTDIR が発生します。

  ただし force オプションを指定したときは new を上書きします。

  option で指定可能なのは :force, :noop と :verbose です。

      FileUtils.ln('gcc', 'cc', {:verbose => true})
      FileUtils.ln('/usr/bin/emacs21', '/usr/bin/emacs')

`FileUtils.ln( list, destdir, *options )`
`FileUtils.link( list, destdir, *options )`

  list[0] へのハードリンク destdir/list[0]、list[1] への ハードリンク destdir/list[1] …を作成します。 destdir がディレクトリでない場合は例外 Errno::ENOTDIR が発生します。

  option で指定可能なのは :force, :noop と :verbose です。

      include FileUtils
      cd('/bin')
      ln(%w(cp mv mkdir), '/usr/bin')

`FileUtils.ln_s( old, new, *options )`
`FileUtils.symlink( old, new, *options )`

  old へのシンボリックリンク new を作成します。 new がすでに存在しディレクトリであるときは new/old を作成します。 new がすでに存在しディレクトリでないならば例外 Errno::ENOTDIR が発生します。

  ただし force オプションを指定したときは new を上書きします。

  option で指定可能なのは :force, :noop と :verbose です。

      FileUtils.ln_s('/usr/bin/ruby', '/usr/local/bin/ruby')
      FileUtils.ln_s('verylongsourcefilename.c', 'c', {:force => true})

`FileUtils.ln_s( list, destdir, *options )`
`FileUtils.symlink( list, destdir, *options )`

  list[0]、list[1] …へのシンボリックリンク dir/list[0], dir/list[1] …を 作成します。destdir がディレクトリでない場合は例外 Errno::ENOTDIR が 発生します。

  ただし force オプションを指定したときは new を上書きします。

  option で指定可能なのは :noop と :verbose です。

      FileUtils.ln_s(Dir.glob('bin/*.rb'), '/home/aamine/bin')

`FileUtils.ln_sf( src, dest, *options )`

  ln_s(src,dest,:force) と同じです。

`FileUtils.mkdir( dir, *options )`

  ディレクトリ dir を作成します。

  option で指定可能なのは :noop と :verbose です。

      FileUtils.mkdir('test')
      FileUtils.mkdir(%w( tmp data ))
      FileUtils.mkdir('notexist', {:noop => true})  # does not create really

`FileUtils.mkdir_p( dir, *options )`
`FileUtils.mkpath( dir, *options )`
`FileUtils.makedirs( dir, *options )`

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

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

  は以下の全ディレクトリを(なければ)作成します。

  - /usr
  - /usr/local
  - /usr/local/bin
  - /usr/local/bin/ruby

  option で指定可能なのは :noop と :verbose です。

`FileUtils.mv( src, dest, *options )`
`FileUtils.move( src, dest, *options )`

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

  option で指定可能なのは :noop と :verbose です。

      FileUtils.mv('badname.rb', 'goodname.rb')
      FileUtils.mv('stuff.rb', 'lib/ruby', {:force => true})

`FileUtils.mv( list, dir, *options )`
`FileUtils.move( list, dir, *options )`

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

  option で指定可能なのは :noop と :verbose です。

      FileUtils.mv('junk.txt', 'dust.txt', '/home/aamine/.trash/')
      FileUtils.mv( Dir.glob('test*.rb'),
                    'T',
                    {:noop => true, :verbose => true} )

`FileUtils.pwd`
`FileUtils.getwd`

  現在のディレクトリを文字列で返します。

`FileUtils.rm( list, *options )`
`FileUtils.remove( list, *options )`

  list[0]、list[1] …を消去します。:force オプションが セットされた場合は作業中すべての StandardError を無視します。

  option で指定可能なのは :force, :noop と :verbose です。

      FileUtils.rm(%w( junk.txt dust.txt ))
      FileUtils.rm(Dir['*.so'])
      FileUtils.rm('NotExistFile', {:force => true})    # never raises exception

`FileUtils.rm_f( list, *options )`
`FileUtils.safe_unlink( list, *options )`

  FileUtils.rm(list, :force => true) と同じです。

`FileUtils.rm_r( list, *options )`

  ファイルまたはディレクトリ list[0], list[1] …を再帰的に消去します。 force オプションを渡した場合 StandardError を無視します。

  option で指定可能なのは :force, :noop と :verbose です。

      FileUtils.rm_r(Dir.glob('/tmp/*'))

`FileUtils.rm_rf( list, *options )`
`FileUtils.rmtree( list, *options )`

  same to rm_r(list, {:force => true})

`FileUtils.rmdir( dir, *options )`

  removes directory DIR. option で指定可能なのは :noop と :verbose です。

      FileUtils.rmdir('somedir')
      FileUtils.rmdir(%w(somedir anydir otherdir))
      # does not remove directory really, outputing message.
      FileUtils.rmdir('somedir', {:verbose => true, :noop => true})

`FileUtils.touch( list, *options )`

  list[0], list[1] …の最終変更時刻 (mtime) とアクセス時刻 (atime) を 更新します。list[n] が存在しない場合は空のファイルを作成します。

  option で指定可能なのは :noop と :verbose です。

      FileUtils.touch('timestamp')
      FileUtils.touch(Dir.glob('*.c'))
      system('make')

`FileUtils.uptodate?( newer, older_list, *options )`

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

  option で指定可能なのは :verbose です。

      FileUtils.uptodate?('hello.o', ['hello.c', 'hello.h']) or system('make')

## module FileUtils::Verbose

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

## module FileUtils::NoWrite

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

links: [IO] [ruby 1.7 feature] [ruby 1.9 feature] [執筆者募集]
reverse links: [1.6.8から1.8.0への変更点(まとめ)] [ftools.rb] [ruby 1.7 feature] [添付ライブラリ]