ももちゃん@アルモニコスです.

すっかり出遅れましたが,ファイル作成日でファイル名を作るスク
リプトを書いたので出してみます.

# デジカメの画像ファイル rename 用に作った.

読んで頂ければ分かりますが,ファイル名の重複判定とか,かなり
手抜いてます.でも時間がないし,適当に使えるので気にしない.

# ruby 的には正しい姿勢と言えよう :-).(たぶん (^^;))

でも,怪しさ爆発の英語 usage は恥ずかしいなぁ (^^;).


#!/usr/local/bin/ruby
# -*- ruby -*-
####################
def usage
  print "usage: ", $0, " [-p <prefix>] [-y] file1 [file2 ...]\n\n"
  print "    default YYYYMMDDXX.ext (XX is sequential number)\n\n"
  print "options:\n"
  print "    -c          copy (default: move)\n"
  print "    -p <prefix> filename prefix (prefixYYMMDDXX.ext)\n"
  print "    -y          format change to YYMMDDXX.ext\n"
  exit 0
end

####################
$filelist = []

def make_filename(f)
  prefix = $OPT_p
  suffix = f[0].scan(/\.\w+$/)[0]
  year = $OPT_y ? f[1].year % 100 : f[1].year

  c = 0
  filename = ""
  while TRUE
    filename = sprintf("%s%02d%02d%02d%02d%s",
		       prefix, year, f[1].month, f[1].day, c, suffix)
    c += 1
    next if $filelist.include?(filename)
    break unless File.exist?(filename)
  end
  $filelist << filename
  filename
end

####################
require "getopts"
usage() if getopts("cy", "p:") == nil

command = $OPT_c ? "cp" : "mv"

$files = []
for f in ARGV
  next unless File.exist?(f)
  $files.push [f, File.mtime(f)]
end
$files.sort! do |a, b|
  a[1] <=> b[1]
end

print "#!/bin/sh\n"
$files.each do |f|
  src = f[0]
  dest = make_filename(f)
  printf("%s %s %s\n", command, src, dest)
end

exit 0

####################