#!/usr/bin/perl
#
# image_rename.pl - 画像ファイルリネームスクリプト
#
# Morikawa Yasuhiro <morikawa@ep.sci.hokudai.ac.jp> 2002/12/02
#
# ・ 概要
#
#    1.PNG, 2.PNG 〜 231.PNG といった画像ファイルを
#    001.png, 002.png 〜 231.png という風にリネームするスクリプト
#
# ・ 使用法 
#
#    画像のあるディレクトリ内で以下のコマンドを使用する.
#
#      $ image_rename.pl
#
#

########################################################
##  デフォルト設定値
########################################################

# 桁数
$len = 3;

# 処理する画像ファイルの形式
@treat = ('gif', 'GIF', 'jpg', 'JPG', 'jpeg', 'JPEG', 'png', 'PNG',
	  'bmp', 'BMP', 'tif', 'TIF', 'tiff', 'TIFF');

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

# カレントディレクトリ内の".", ".."を除く全てのファイルを取得
opendir(DIR, ".");
@allfiles = grep(!/^\.\.?$/, readdir(DIR));
closedir(DIR);

########################################################
##   画像ファイルでなかったり,
##   数字のファイル名でないものを除去
########################################################

foreach $file (@allfiles){
    @file_parts = split(/\./, $file);
    #print STDOUT "file name is $file_parts[0], expand is $file_parts[$#file_parts] \n";
    #
    #  a.gif や ab0.png といったファイル名が含まれている場合は
    #  エラーを返す
    #
    unless ($file_parts[0] =~ /^\d+$/){
	die "このディレクトリには 123.gif のような名前でないファイルが含まれており, 処理を実行できませんでした. \n";
    }
    #
    #  @treat に含まれていない拡張子の場合はエラーを返す.
    #
    undef $img_ok;
    foreach $imgtype (@treat){
	if ($file_parts[$#file_parts] eq $imgtype){
	    $img_ok = 1;
	}
    }
    unless ($img_ok){
	die "このディレクトリには, このスクリプトではサポートしていない画像形式のファイルが存在するため, 処理を実行できませんでした. \n";
    }
}

######################################################
##  ファイル名をリネーム
######################################################

foreach $file (@allfiles){
    @file_parts = split(/\./, $file);
    $filename = $file_parts[0];
    $imgtype = $file_parts[$#file_parts];
    #
    # ファイルのナンバーを規定の桁数にする
    #
    $filename_len = length($filename);
    $differ_len = $len - $filename_len;
    if ($differ_len < 0){
	die "リネームするファイル名の長さが元々のファイル名の長さより短く設定されているため, 処理を実行できませんでした. \n";
    }
    $new_filename = "0" x "$differ_len"."$filename";

    #print STDOUT $new_filename;

    #
    # 拡張子を大文字にする
    #
    $new_imgtype = $imgtype;
    $new_imgtype =~ tr/A-Z/a-z/;

    #print STDOUT $new_imgtype;

    rename("$file", "$new_filename\.$new_imgtype");
}

print STDOUT "処理は正常に終了しました. \n";

exit 0;
