バイオインフォ道場、くまぞうです。
スクリプトを書く時、1つのファイルについて処理が完成したら他のファイルでも使えるように機能を拡張したくなります。また、ファイルの有無やその属性情報によって処理を変更することは良くあります。情報の再利用やデフォルト値・パラメータの保存・バックアップなどを考慮する必要があるかもしれません。ファイルやディレクトリの処理をスクリプト中で行えるようになると便利です。
スポンサーリンク
ファイル情報の利用
ファイル名・パス・属性、作成日・最終アクセス日時など様々な情報を活用しましょう。
Fileクラスを使ってファイル情報を取得する
ファイルの情報を利用する場合は、Fileクラスを利用します。ファイル名やパスの情報、ファイル情報の詳細を取得することができます。Fileクラスの各種メソッド(File.exist?
・File.size
)を呼び出して必要な情報を得る方法や、File.stat
でいっぺんに情報を取得する方法などがあります。尚、ファイルの読み・書きもFileクラスで行います。
file1.rb
#! /usr/bin/ruby # File情報を利用する file = ARGV[0] abort "not found #{file}" if !File.exist?(file) # Fileクラス dirname = File.dirname(file) extname = File.extname(file) basename = File.basename(file, extname) backup = File.join(dirname, basename+"_2"+extname) File.copy_stream(file, backup) # ファイルの複製 s = File.stat(file) # File::Statを利用して、効率的に情報を得る title = "FILE INFORMATION" printf "%s\n%s\n", title, '-'*title.size puts " name : #{file}" puts " size : #{s.size}" puts " mtime : #{s.mtime}" puts " write : #{s.writable?}" puts "backup : #{backup}"
$ ls myapp* myapp.txt $ cat myapp.txt aaa bbb $ ruby file1.rb FILE INFORMATION ---------------- name : myapp.txt size : 8 mtime : 2016-10-01 19:45:46 +0900 write : true backup : ./myapp_2.txt
ファイルリストの利用
あるディレクトリ内に存在するファイル、条件で絞り込んだファイルなどのリストを取得して活用しましょう。
Dirクラスを使ってファイルリストを取得する
ある条件で絞り込んだファイルを取得・利用する場合は、Dirクラスを利用します。Dir['*.*']
は、[]内で絞り込んだ条件に合致したファイル名を配列として利用可能です。Dir.glob('*.*')
は、更にブロックを活用できる点でとても使いやすいです。
file2.rb
#! /usr/bin/ruby # ファイルリストを活用する puts Dir['myapp*'].join(', ') puts # ファイルリストを活用する(個々にブロックを活用) Dir.glob('myapp*') do |f| s = File.stat(f) puts " name : #{f}" puts " size : #{s.size}" puts " mtime : #{s.mtime}" File.open(f).each do |line| puts "#{$.}:"+line.chomp end puts end
$ ls myapp* myapp.txt myapp_2.txt $ ruby file2.rb myapp.txt, myapp_2.txt name : myapp.txt size : 8 mtime : 2016-10-01 19:45:46 +0900 1:aaa bbb name : myapp_2.txt size : 8 mtime : 2016-10-13 19:03:38 +0900 1:aaa bbb
スポンサーリンク