#author("2018-08-30T09:37:26+09:00","default:yakumo_murakami","yakumo_murakami")
[[Ruby]]
テキストでもそうなんだけど、「12月23日・メモ.xlsx」みたいに頭に日付つけたファイルを定期的に作って作業する事があるのよね。いちいちコピーしてたんだけど、めんどい。
そんなわけで、勝手に新しい日付をナンバリングして複写してみた。
* neo.rb(2018/8/30) [#l2fa2559]
#!/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
うん。
** 使い方 [#q4efb835]
パスの通ったところに設置し、コンソールで作業したいディレクトリに移動して、このスクリプトを呼び出せばOK。
** 注意点 [#bcb2f963]
- 動作検証はcygwin(64)でやりました。
- 最も新しいタイムスタンプのファイルを探し、ファイル名の先頭の日付を書き換えます。
- 今日の日付の入ったファイルがもうある時は何もしない。
- 年が入ってないしゼロサプレスもしてないけど、そこはお好みで。
- ''最初に日付の入っている最新ファイル'' を探し、それをもとにコピーする。
-- 日付が最初にあるファイルが存在しない場合、その旨を表示して終了。
-- 日付は「8月30日」形式が基本。
- デフォルトでは*.xlsxを対象としているが、変更したい時は最終パラメータに拡張子をいれて。たとえば以下のように。
$ ruby neo.rb txt