version 0.5
@@ -12,6 +12,7 @@ | ||
12 | 12 | # version 0.2 (2010/December/06) |
13 | 13 | # version 0.3 (2011/January/04) |
14 | 14 | # version 0.4 (2011/January/05) |
15 | +# version 0.5 (2011/January/07) | |
15 | 16 | # |
16 | 17 | # GNU GPL Free Software |
17 | 18 | # |
@@ -56,7 +57,7 @@ | ||
56 | 57 | #use Data::HexDump; |
57 | 58 | |
58 | 59 | |
59 | -#binmode( STDOUT, ":utf8" ); # "Wide character in print at ..." 警告を抑止 | |
60 | +# IOの文字コードを規定 | |
60 | 61 | if($flag_charcode eq 'utf8'){ |
61 | 62 | binmode(STDIN, ":utf8"); |
62 | 63 | binmode(STDOUT, ":utf8"); |
@@ -63,9 +64,9 @@ | ||
63 | 64 | binmode(STDERR, ":utf8"); |
64 | 65 | } |
65 | 66 | if($flag_charcode eq 'shiftjis'){ |
66 | - binmode(STDIN, "encoding(sjis)"); # Windowsのコマンドラインではsjisになる | |
67 | - binmode(STDOUT, "encoding(sjis)"); # Windowsのコマンドラインではsjisになる | |
68 | - binmode(STDERR, "encoding(sjis)"); # Windowsのコマンドラインではsjisになる | |
67 | + binmode(STDIN, "encoding(sjis)"); | |
68 | + binmode(STDOUT, "encoding(sjis)"); | |
69 | + binmode(STDERR, "encoding(sjis)"); | |
69 | 70 | } |
70 | 71 | |
71 | 72 | my $strTargetDir = $ENV{'HOME'}; # 対象ディレクトリ |
@@ -84,7 +85,7 @@ | ||
84 | 85 | } |
85 | 86 | my @arrKnownExt = ('.jpg', '.jpeg', '.JPG', '.JPEG'); |
86 | 87 | |
87 | -my $flag_gui = 0; | |
88 | +my $flag_gui = 0; # GUIを表示するとき 1 | |
88 | 89 | my $flag_fname_style = 'date-base'; # date-base, base-date, date : ファイル名決定で日時と元ファイル名の利用方法 |
89 | 90 | my $flag_undo_mode = 0; # 0:OFF, 1:ON |
90 | 91 | my $flag_verbose = 1; |
@@ -556,8 +557,14 @@ | ||
556 | 557 | |
557 | 558 | $strReturn .= "対象ディレクトリ : ".$arrImageFiles[0][1]."\n\n"; |
558 | 559 | |
560 | + # ファイル一時退避用のランダム文字列(元ファイル→一時退避→新ファイル) | |
561 | + my $strT = '.'; | |
562 | + for(1 .. 5){ $strT .= sub_rand_char(); } | |
563 | + | |
564 | + # 改名orプレビュー pass1 (新ファイル名作成、一時ファイル名へ退避) | |
559 | 565 | for(my $i=0; $i<=$#arrImageFiles; $i++){ |
560 | - if(length($arrImageFiles[$i][3])<8){ | |
566 | + if(length($arrImageFiles[$i][3]) < 8){ | |
567 | + # unix秒が8桁未満は異常 | |
561 | 568 | $strReturn .= "-- : ".$arrImageFiles[$i][2]." (no exif)\n"; |
562 | 569 | $arrImageFiles[$i][4] = $arrImageFiles[$i][2].'.jpg'; # 新ファイル名リストに入れる(ファイル名重複検査用) |
563 | 570 | } |
@@ -578,24 +585,38 @@ | ||
578 | 585 | $nCount++; |
579 | 586 | } |
580 | 587 | else { |
581 | - # 改名 | |
582 | - my $strT = '.'; | |
583 | - for(1 .. 5){ $strT .= sub_rand_char(); } | |
588 | + # 改名(元ファイル→一時ファイル) | |
584 | 589 | my $strTempFile = $arrImageFiles[$i][0] . $strT; |
585 | 590 | |
586 | 591 | if(rename(sub_conv_to_local_charset($arrImageFiles[$i][0]), |
587 | - sub_conv_to_local_charset($strTempFile)) == 1 && | |
588 | - rename(sub_conv_to_local_charset($strTempFile), | |
589 | - sub_conv_to_local_charset($strNewName)) == 1){ | |
590 | - $strReturn .= "変更 : ".basename($arrImageFiles[$i][0])." -> ".basename($strNewName)."\n"; | |
591 | - $nCount++; | |
592 | + sub_conv_to_local_charset($strTempFile)) == 1){ | |
593 | +# $strReturn .= "変更 : ".basename($arrImageFiles[$i][0])." -> ".basename($strTempFile)."\n"; | |
592 | 594 | } |
593 | - else{ $strReturn .= "失敗 : ".basename($arrImageFiles[$i][0])."\n"; } | |
595 | + else{ $strReturn .= "失敗 : ".basename($arrImageFiles[$i][0])." -> ".basename($strTempFile)."\n"; } | |
594 | 596 | } |
595 | 597 | } |
596 | 598 | } |
597 | 599 | } |
598 | 600 | |
601 | + # 改名 pass2 (一時ファイルから新ファイル) | |
602 | + if($flag_preview ne 'preview'){ | |
603 | + for(my $i=0; $i<=$#arrImageFiles; $i++){ | |
604 | + | |
605 | + if(length($arrImageFiles[$i][3]) < 8){ next; } # exif無しスキップ | |
606 | + my $strNewName = $arrImageFiles[$i][1].$arrImageFiles[$i][4]; # 新ファイル名 | |
607 | + if($arrImageFiles[$i][0] eq $strNewName){ next; } # 新旧ファイル名同一スキップ | |
608 | + my $strTempFile = $arrImageFiles[$i][0] . $strT; | |
609 | + if(rename(sub_conv_to_local_charset($strTempFile), | |
610 | + sub_conv_to_local_charset($strNewName)) == 1){ | |
611 | + $strReturn .= "変更 : ".basename($arrImageFiles[$i][0])." -> ".basename($strNewName)."\n"; | |
612 | + $nCount++; | |
613 | + } | |
614 | + else{ $strReturn .= "失敗 : ".basename($strTempFile)." -> ".basename($strNewName)."\n"; } | |
615 | + | |
616 | + } | |
617 | + } | |
618 | + | |
619 | + | |
599 | 620 | if($flag_preview eq 'preview'){ |
600 | 621 | $strReturn .= "\n".sprintf("%d 個のファイル中、対象画像は %d 個です", $#arrImageFiles + 1, $nCount)."\n"; |
601 | 622 |