日本語ファイル名の文字コードを変換するスクリプト(Perl版)
追記:修正版をアップしました。
文字化けした全角ファイル名の文字コードを再帰的に変換するスクリプト - myhd
以前の記事のやり方だと、文字列と文字コードの組み合わせによっては上手く動かない(文字化けしたファイルのmvに失敗する)ことがわかったので、Perlで書き直しました。
#!/usr/bin/perl use strict; use warnings; use File::Find; use File::Copy; use Encode; #use Encode::Guess; my $target_dir = $ARGV[0]; find (\&convmv_euc_to_sjis, $target_dir); sub convmv_euc_to_sjis() { # ファイルのみを対象とする場合 # return unless (-f $_); # 変換前文字コードがEUC-JPのみを対象とする場合 # my $enc = guess_encoding($_, qw/euc-jp shiftjis/); # my $enc_name = ref $enc ? $enc->name : $enc; # return unless ($enc_name eq 'euc-jp'); my $str = $_; Encode::from_to($str, 'euc-jp', 'shiftjis'); move $_, $str or die $!; }
ただ、変換対象がディレクトリだと、中身へchdir(find関数は内部でchdirしながら処理している)するときにエラーとなってしまうため、対策を考え中。