macOSのMacUTF8からUTF8にリネームするPerlスクリプト

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);
}