linuxに引っ越しシリーズで書いてみたやつ。
もともとmacOSのBooksディレクトリに電子書籍を日本語ファイル名で置いていた。Linuxに作業環境を移すためにファイルの転送をする場合、実はmacOSのutf8は微妙にutf8と異なるmacUTF8なので変換をする必要がある。
rsyncとiconvを組み合わせる方法もあるけど、今回はすでに転送してしまったのでPerlで解決した。
#!/usr/bin/env perl use strict; use warnings; use Encode; use Encode::UTF8Mac; use Path::Tiny; my $root = path("Books"); my @queue = ($root->children); my @rename_list; while (@queue) { my $child = shift @queue; if ($child->is_dir) { push(@queue, $child->children); } if ($child =~ /(?:pdf|epub)/) { next if $child =~ /^\p{ascii}+$/; push(@rename_list, $child); } } for my $file (@rename_list) { my $fpath = path($file); my $mac_file_name = Encode::decode('utf-8-mac', $file); my $utf8_file_name = Encode::encode('utf8', $mac_file_name); $fpath->move($utf8_file_name); }