convmvと波ダッシュ問題とworkaround

Sambaのunix charsetをUTF-8に変更したでファイル名のエンコーディングをconvmvを使ってEUCからUTF-8にしたんだけど、いわゆる波ダッシュ問題にひっかかってた。convmvはEUCなファイル名中の「〜」を波ダッシュに変換してくれるんだけど、Windowsから使うときは全角チルダじゃないとうまくアクセスできないアプリケーションがあった。
というわけで、おまかせブログ2.0 - UTF-8 の文字コード 「〜」と「〜」を参考にして、perlスクリプトをでっちあげてファイル名を変換して対応した。

#!/usr/bin/perl -w

my($nowstr) = '〜';
my($newstr) = '〜';

if(!@ARGV){$d=".";}else{$d=$ARGV[0];}
&StrConv($d);

sub StrConv{
  my($dir) = @_;
  my(@f,$fo,$co,$a);

  opendir(IN,$dir);
    @f=readdir IN;
  close IN;

  foreach(@f){
    if(/^[^.]/) {
      $fo = $_;
      $new = $fo;
      if($fo =~ /$nowstr/i) {
        $new =~ s/$nowstr/$newstr/gi;
        rename "$dir/$fo","$dir/$new";
        print "Change: $dir/$fo -> $dir/$new";
      }
      if( -d "$dir/$_" ){
        &StrConv("$dir/$_");
      }
    }
  }
}