Ruby

テキストでもそうなんだけど、「12月23日・メモ.xlsx」みたいに頭に日付つけたファイルを定期的に作って作業する事があるのよね。いちいちコピーしてたんだけど、めんどい。

そんなわけで、勝手に新しい日付をナンバリングして複写してみた。

neo.rb(2018/8/30)

#!/usr/bin/ruby -EUTF-8

require 'date'
require 'fileutils'

class String
 def _newest(nn)
   file = nil
   if nn == false
     file = Dir.glob("*.#{self}").sort_by {|f| File.mtime(f)}.reverse[0]
   else
     Dir.glob("*.#{self}").sort_by {|f| File.mtime(f)}.reverse.each{|fn|
       if fn =~ /^\d/
         file = fn.clone
         break
       end
     }
   end
   file
 end
 def _getDate
   fn = self
   yd = Date.today.strftime("%Y")
   d = fn.gsub(/^(\d{1,9})月(\d{1,2})日.+$/,"#{yd}/\\1/\\2")
   d1 = DateTime.parse(d)
   fn2 = fn.clone
   if d =~ /^\d+\/\d+\/\d+$/
     begin
       d3 = Date.today.strftime("%m月%d日")
       fn2 = fn.gsub(/^(\d{1,9})月(\d{1,2})日(.+)$/,"#{d3}\\3")
     rescue => ee
       p ee
     end
   else
     p "フォーマットが対応外(先頭にn月d日が入ってない)。"
   end
   fn2
 end
 def _cpy_today
   fn = self._newest(true)
   fn2 = fn._getDate
   if fn != fn2 && File.exist?(fn2) == false
     print "#{fn} => #{fn2} ... "
     #FileUtils.cp(fn,fn2,{:preserve => true})
     FileUtils.cp(fn,fn2)
     print "Done.\n"
   end
 end
end

prm = "xlsx"

ARGV.each{|x|
 prm = x.clone if x =~ /^[a-z0-9]+$/
}

prm._cpy_today

うん。

使い方

パスの通ったところに設置し、コンソールで作業したいディレクトリに移動して、このスクリプトを呼び出せばOK。

注意点

$ ruby neo.rb txt

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-08-30 (木) 09:37:26