#!/usr/bin/perl
#
# windows の連番振りを Linux で扱えるように整形する。
# file-(number).jpg => file-[fixed_width]number
#  カレントディレクトリから再帰的に実行する。

use strict;
use warnings;
use File::Find;

# コマンドライン引数の評価
our $verbose = 0;
our $dryrun  = 0;

foreach(@ARGV){
	if(/v/i){ $verbose = 1};
	if(/d/i){ $dryrun = 1};
	if(/h/i){ print	"\nWindows 独自の画像ファイルのナンバリングを再帰的に標準形式に変更する。\n";
		  print "(例) file ([variable lendth]number).jpg --> file-[4digits fixed-lenght]number.jpg\n\n";
		  print	"  -d : dryrun mode\n";
		  print	"  -h : help (this file)\n";
		  print	"  -v : verbose mode\n\n";
		  exit;
	}
}
print "\n";

my @search_start_dir = ('./');
find(\&fname_format, @search_start_dir);
print "\n";

sub fname_format{

	my $file_name = $_;
	my $count = 1;

	# 末尾（＝拡張子）が jpg, jpeg, JPG, JPEG だけ
	if( $_ =~ /jpe?g$/i){
	
		# file (12).jpg => file-12.jpg の変換
		s/\s|\)//g;
		s/\(/-/;
		my $file_tmp = $_;
		
		# 連番数字部分の抽出
		# ファイル名に連番以外に数字が無いことを前提にしているが
		s/[a-zA-Z|\-|\.]//g;
		if($verbose){ print $file_name, " > ", $file_tmp, " >> ", $_, " >>> "};

		## 最初の一枚には番号がない
		if($_){
			# -12 などを強制的に４桁の -0012 に書き換える
			$count = sprintf("%04d", $_);
			$file_tmp =~ s/$_/$count/;
			if($verbose){ print $count, " >>>> ", $file_tmp, "\n"};  
			if($dryrun && !$verbose){ print $file_tmp, " <<< ", $file_name, "\n"};  
		} else {
			# 番号なしは -0001 を付与する
			$file_tmp =~ s/\.jpe?g/-0001.jpg/i;
			if($verbose){ print "0001[force]", " >>>> ", $file_tmp, "\n"};
			if($dryrun && !$verbose){ print $file_tmp, " <<< ", $file_name, " <---- [force added]\n"};
		}		
		
		# ファイル名の書き換え
		if(!$dryrun){ rename($file_name, $file_tmp)};
	}
};
