LoginSignup
1
0

More than 5 years have passed since last update.

Ruby:あるディレクトリ内にあるすべてのファイル名を別のファイル名に変更するプログラム

Last updated at Posted at 2018-01-10

目的

あるディレクトリ内の画像ファイルの名前が日本語になっていたので、DB上対応するidに一気に変更したかった。
120個くらいしかなかったので気合でもできたが、プログラミングの学習のためにあえてRubyで実装。

環境

ruby 2.4.2

準備

現状のファイル名と変更後のファイル名が1on1で対応しているcsv(などの)ファイルを作成しておく(以下、便宜的にnamechange.csvと命名。当csvファイルは、1列目に現状のファイル名、2列目に変更後のファイル名を記載。)。
なお画像は、 ./imagefolder という名前のフォルダにすべて入っているものとする。

実装内容

namechange.csvを配列化

namechange.rb
table = CSV.read('namechange.csv')

ディレクトリ内のファイル名を取得して配列に代入

namechange.rb
filenames = []
dir = Dir.open("imagefolder")
 dir.each do  |file|
  filenames << file
 end

x = filenames.length
x = x-1 #ディレクトリ内には.DS_Storeが存在するため長さを調整

tableの列を分解して代入

namechange.rb
prename = Array.new(x)
postname = Array.new(x)

for num in 0..x-1
  prename[num] = table[num][0]
  postname[num] = table[num][1]
end

tableの旧ファイルとディレクトリのファイル名を一致させて、ファイル名を書き換え

namechange.rb
for m in 0 .. x
  y = prename.find_index(filenames[m])
    if y == nil then 
      else
        FileUtils.mv("./imagefolder/#{filenames[m]}","./imagefolder/#{postname[y]}")
      end
end

p "Finish!"
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0