У меня есть каталог коллекции фильмов с локальными ссылками на папки и файлы для быстрого доступа. Недавно я реорганизовал все пространство на жестком диске, и мне нужно обновить ссылки, и я пытаюсь сделать это автоматически с помощью Perl.
Я могу экспортировать данные в файл XML и импортировать их снова. Я могу извлечь новые пути к файлам с помощью File :: Find , но я застрял с двумя проблемами. Я понятия не имею, как связать $title
из нового пути к файлу с соответствующим $title
из файла XML. Я имею дело с такими файлами в первый раз, и я не знаю, как продолжить процесс замены. Вот что я сделал до сих пор
use strict;
use warnings;
use File::Basename;
use File::Find;
use File::Spec;
use XML::Simple;
use Data::Dumper;
my $dir_target = 'D:/Movies/';
my %titles_locations = ();
find(\&file_handler, $dir_target);
sub file_handler {
/\.iso$/ or return;
my $fn = $File::Find::name;
$fn =~ s/\//\\/g;
$fn =~ /(.*\\)(.*)/;
my $path = $1;
my $filename = $2;
my $title = (File::Spec->splitdir($fn))[2];
$title =~ s/(.*?)\s\(\d+\)$/$1/;
$title =~ s/~/:/;
$title =~ s/`/?/;
my $link_local = '<link><description>Folder</description><url>'.$path.'</url><urltype>Movie</urltype></link><link><description>'.$filename.'</description><url>'.$fn.'</url><urltype>Movie</urltype></link>' unless $title eq '';
$titles_locations{$title} = {'filename'=>$filename, 'path'=>$path };
}
my $xml_in = XMLin('somepath/test.xml', ForceArray => 1, KeepRoot => 1);
my $title = {'key1' => 'title', 'key2' => 'links'};
foreach my $link (keys %$title) {
}
print Data::Dumper->Dump([$title]);
my $xml_out = XMLout($xml_in, OutputFile => 'somepath/test_out.xml', KeepRoot=>1);
А вот фрагмент данных, которые мне нужно отредактировать.
Если найдены ссылки imdb и dvdempire - не трогайте.
если найдены локальные ссылки, заменить, в противном случае вставить.
Я готов завершить код самостоятельно, но мне нужно несколько направлений, как действовать дальше.
Благодаря.
<title>$title</title>
.......
<links>
<link>
<description>IMDB</description>
<url>http://www.imdb.com/title/VARIABLE</url>
<urltype>URL</urltype>
</link>
<link>
<description>DVD Empire</description>
<url>http://www.dvdempire.com/VARIABLE</url>
<urltype>URL</urltype>
</link>
<link>
<description>Folder</description>
<url>OLD_FOLDERPATH</url>
<urltype>Movie</urltype>
</link>
<link>
<description>OLD_FILENAME</description>
<url>OLD_FILENAMEPATH</url>
<urltype>Movie</urltype>
</link>
</links>