読者です 読者をやめる 読者になる 読者になる

ファイルを指定した数ごとにディレクトリに分割するスクリプト

Ruby

あるディレクトリに100個のTIFFファイルがあり、それを先頭から10個、10個、5個ごとにサブディレクトリに分割する必要がありました。以下のようなスクリプトを書きました。

  • file_part.rb
require "fileutils"

destinations = Array.new
total = 0

ARGV.each_with_index do |i, j|
  destinations.concat(Array.new(i.to_i, j + 1))
  total += i.to_i
end

(1..ARGV.count).each do |i|
  Dir.mkdir(i.to_s)
end

dir = Dir.open("./")
files = Array.new

while name = dir.read
  if name.include?(".tif")
    files.push(name)
  end
end
files.sort!

files.each_with_index do |name, i|
  FileUtils.mv(name, destinations[i % total].to_s + "/" + name)
end

dir.close

以下のようにして分割するファイル数を指定します。

$ file_part.rb 10 10 5

この実行例では、1、2、3というディレクトリが作成され、その中に指定した順番通りにファイルが格納されました。