• R/O
  • SSH
  • HTTPS

renfile-exif: Commit


Commit MetaInfo

Revision5 (tree)
Zeit2011-01-07 23:06:16
Autorinoue-h

Log Message

version 0.5

Ändern Zusammenfassung

Diff

--- trunc/renfile-exif.pl (revision 4)
+++ trunc/renfile-exif.pl (revision 5)
@@ -12,6 +12,7 @@
1212 # version 0.2 (2010/December/06)
1313 # version 0.3 (2011/January/04)
1414 # version 0.4 (2011/January/05)
15+# version 0.5 (2011/January/07)
1516 #
1617 # GNU GPL Free Software
1718 #
@@ -56,7 +57,7 @@
5657 #use Data::HexDump;
5758
5859
59-#binmode( STDOUT, ":utf8" ); # "Wide character in print at ..." 警告を抑止
60+# IOの文字コードを規定
6061 if($flag_charcode eq 'utf8'){
6162 binmode(STDIN, ":utf8");
6263 binmode(STDOUT, ":utf8");
@@ -63,9 +64,9 @@
6364 binmode(STDERR, ":utf8");
6465 }
6566 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)");
6970 }
7071
7172 my $strTargetDir = $ENV{'HOME'}; # 対象ディレクトリ
@@ -84,7 +85,7 @@
8485 }
8586 my @arrKnownExt = ('.jpg', '.jpeg', '.JPG', '.JPEG');
8687
87-my $flag_gui = 0;
88+my $flag_gui = 0; # GUIを表示するとき 1
8889 my $flag_fname_style = 'date-base'; # date-base, base-date, date : ファイル名決定で日時と元ファイル名の利用方法
8990 my $flag_undo_mode = 0; # 0:OFF, 1:ON
9091 my $flag_verbose = 1;
@@ -556,8 +557,14 @@
556557
557558 $strReturn .= "対象ディレクトリ : ".$arrImageFiles[0][1]."\n\n";
558559
560+ # ファイル一時退避用のランダム文字列(元ファイル→一時退避→新ファイル)
561+ my $strT = '.';
562+ for(1 .. 5){ $strT .= sub_rand_char(); }
563+
564+ # 改名orプレビュー pass1 (新ファイル名作成、一時ファイル名へ退避)
559565 for(my $i=0; $i<=$#arrImageFiles; $i++){
560- if(length($arrImageFiles[$i][3])<8){
566+ if(length($arrImageFiles[$i][3]) < 8){
567+ # unix秒が8桁未満は異常
561568 $strReturn .= "-- : ".$arrImageFiles[$i][2]." (no exif)\n";
562569 $arrImageFiles[$i][4] = $arrImageFiles[$i][2].'.jpg'; # 新ファイル名リストに入れる(ファイル名重複検査用)
563570 }
@@ -578,24 +585,38 @@
578585 $nCount++;
579586 }
580587 else {
581- # 改名
582- my $strT = '.';
583- for(1 .. 5){ $strT .= sub_rand_char(); }
588+ # 改名(元ファイル→一時ファイル)
584589 my $strTempFile = $arrImageFiles[$i][0] . $strT;
585590
586591 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";
592594 }
593- else{ $strReturn .= "失敗 : ".basename($arrImageFiles[$i][0])."\n"; }
595+ else{ $strReturn .= "失敗 : ".basename($arrImageFiles[$i][0])." -> ".basename($strTempFile)."\n"; }
594596 }
595597 }
596598 }
597599 }
598600
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+
599620 if($flag_preview eq 'preview'){
600621 $strReturn .= "\n".sprintf("%d 個のファイル中、対象画像は %d 個です", $#arrImageFiles + 1, $nCount)."\n";
601622
Show on old repository browser