iTunesで管理している曲ファイルの場所をコマンドラインから調べれるようにします。
iTunesのライブラリのxmlを読み込んで指定の曲を調べるスクリプトをためしに書いてみました。iTunesのライブラリのxmlは~/Music/iTunes/iTunes Music Library.xmlです。
XMLをパースしたりせずに、正規表現とフラグ変数で強引にやってみると以下のような感じになりました。
use strict; use warnings; use IO::File; use Carp; use Encode; use Perl6::Say; use URI::Escape; my $itunes_lib_file = shift; my $keyword = decode_utf8(shift); my $fh = IO::File->new; $fh->open($itunes_lib_file, 'r') or croak "Can't open $itunes_lib_file: $!"; my $found = ''; my $song_name = ''; my $location = ''; for my $line (<$fh>) { ($song_name) = $line =~ m!<key>Name</key><string>(.*?)</string>!; ($location) = $line =~ m!<key>Location</key><string>(.*?)</string>!; if ($song_name) { if (decode_utf8($song_name) =~ m/$keyword/) { $found = $song_name; $song_name = ''; } } elsif ($location) { if ($found) { $location =~ s!^file://localhost!!; $location = uri_unescape($location); say "$location"; $found = ''; $location = ''; } } }
次のように使うと、曲名がキーワードにマッチした曲ファイルの場所が出力されます。
$ perl find_music_file.pl ~/Music/iTunes/iTunes\ Music\ Library.xml ハレ
とここまで、書いてmdfind使えば良いじゃんと言う事に気づいた。
mdfind ハレ
MacOSX限定ですけど。