複数のディレクトリから同じ名前のファイルを集めるスクリプト

複数のディレクトリから同じ名前のファイルを一つのディレクトリに集めるスクリプトです。同じ名前だと上書きされてしまうので、ファイル名はディレクトリ名にしています。当然ながら拡張子はそのままです。

require 'fileutils'
include FileUtils

CURRENT_DIR = "/examplepath"
COLLECT_FILE = "result.log"
COLLECT_EXTENSION = File.extname(COLLECT_FILE)
OUTPUT_DIR = "./logs"

cd(CURRENT_DIR)

begin
  mkdir(OUTPUT_DIR)
rescue Errno::EEXIST
  print "overwrite?(y/n)>"
  exit if /^y/i !~ gets.chomp
end

Dir.glob("*/#{COLLECT_FILE}") do |file_path|
  dir_name = file_path.split("/")[-2]
  begin
    cp(file_path,
       "#{OUTPUT_DIR}/#{dir_name}.#{COLLECT_EXTENSION}",
       {:preserve => true})
  rescue
    puts "#{file_path} couldn't copy."
  end
end

必要に応じて、cdせずにコンソールのカレントディレクトリを使用する、関数化してパラメータにするなどしてください。


Have a Nice Script!


■参考
class Dir - Ruby 1.8.7 リファレンスマニュアル
http://doc.okkez.net/static/187/class/Dir.html

class File - Ruby 1.8.7 リファレンスマニュアル
http://doc.okkez.net/static/187/class/File.html

module FileUtils - Ruby 1.8.7 リファレンスマニュアル
http://doc.okkez.net/static/187/class/FileUtils.html#options