ファイル名を途中から採番してリネームするスクリプト

file01.xxx
file02.xxx

上のディレクトリに加えたファイルfugafuga.yyyを

file01.xxx
file02.xxx
fugafuga.yyy   # 追加

file03.xxxにリネームしたいときに。

file01.xxx
file02.xxx
file03.xxx    # リネーム

手順

以下のスクリプトコマンドラインで実行します。
(リネーム対象ファイルかどうか判定できれば、同じ拡張子でも大丈夫です)

> ruby -r fileutils -e "Dir.glob('*').sort_by {|v| File.mtime(v) }.each_with_index{|f, i| FileUtils.mv(f, \"file#{ sprintf('%02d', i + 1) }.xxx\") if /\Afile\.xxx\z/ !~ f }"


展開するとこうなります。(ブロックチェーンをインデントしてみた)

require "fileutils"

# ワイルドカード"*"(アスタリスク)でディレクトリ内の全ファイルを処理
Dir.glob("*").sort_by {|f|
  # タイムスタンプ順に採番する
  File.mtime(f)
}.each_with_index {|f, i|
  # リネーム対象ファイルかどうか正規表現で判定(!~はマッチしない場合を真とする演算子)
  if /\Afile.*\.xxx\z/ !~ f
    # リネーム対象ファイルの場合、リネームを実行
    FileUtils.mv(f, "file#{ sprint('%02d', i + 1) }.xxx")
  end
}

ディレクトリ内に余計なファイルが混じっている場合、Dir.globの引数で排除してください。
(※globは正規表現ではなくワイルドカード方式です。)