maemaewaterの日記

PHP/Python/JavaScript/C#/C++などによるプログラムに関することを主に書いています。

スキャンした書類のページの番号が連続していない場合のファイル名変更スクリプト

スキャンした書類の画像のファイル名が、ページ順ではなかった場合に番号を振りなおすスクリプトです。

以下のようなディレクトリ構成でスクリプトを実行します。

  • num_change.rb
  • images/
    • 画像_001.jpg
    • 画像_002.jpg
    • ...

スクリプト(num_change.rb)は次の通りです。

require 'fileutils'

input_directory  = './images'
output_directory = './images_out'

FileUtils.mkdir_p(input_directory)
FileUtils.mkdir_p(output_directory)
files = Dir.glob("#{input_directory}/*.jpg")

def change_page_number(page_num)
  case page_num
  when 0
    0
  when 1
    3
  when 2
    1
  when 3
    2
  end
end

files.each do |file|
  filename = File.basename(file)

  m = /(.*)_(\d{3}).jpg/.match(filename)
  base_name = m[1]
  page_code = m[2]

  page_num_base = page_code.to_i(10) - 1
  
  page_num = page_num_base % 4
  page_code_to = format('%03d', change_page_number(page_num) + 4 * (page_num_base / 4) + 1)

  output_filename = "#{output_directory}/#{base_name}_#{page_code_to}.jpg"
  
  FileUtils.cp(file, output_filename)
  puts("#{file} -> #{output_filename}")
end

処理を実行するには次のようにします。

cd (num_change.rbを作成したパス)
ruby num_change.rb