08:35 pm
Наковнокодил скрипт для переименования
файлов сериала «Стар Трек»,
на основе данных Википедии.
«Стар Трек» скачан известно откуда.
#!/usr/bin/env perl
use strict;
use warnings;
use integer;
use utf8;
use open qw( :utf8 :std );
use File::Find ();
use File::Basename;
use vars qw/*name *dir *prune/;
*name = *File::Find::name;
*dir = *File::Find::dir;
*prune = *File::Find::prune;
my $REGEX = q^<td align="center">(\d+)\.(\d+)</td><td>«<b>(.+?)</b>»<br>.*?lang="en">(.+?)</span>^;
$REGEX =~ s#\s+# #g;
$REGEX =~ s#> ?<#> ?<#g;
my $CNT = '';
while (<STDIN>)
{
s/(\n|\t\r)+/ /;
s/\s\s+/ /;
$CNT .= $_;
}
print '#!/bin/bash
set -e
set -u
';
my %SER = ();
while ($CNT =~ s/$REGEX//i)
{
#print qq#"$1x$2 — $3 ($4).avi"\n#;
$SER{"$1x$2"} = "$1x$2 — $3 ($4).avi";
}
sub wanted
{
my ($dev,$ino,$mode,$nlink,$uid,$gid);
(($dev,$ino,$mode,$nlink,$uid,$gid) = lstat($_)) &&
-f _ &&
/^.*\.avi\z/s
&& do
{
utf8::decode($name);
my $dir = dirname($name);
my $f = basename($name);
if ($f =~ m/(\d+).(\d+)/)
{
if (exists $SER{"$1x$2"})
{
my $newname = $SER{"$1x$2"};
if ($newname ne $f)
{
print(qq(mv "$name" "$dir/$newname"\n));
}
}
}
}
}
File::Find::find({wanted => \&wanted}, '.');
print '
exit 0
';
exit 0
Использовать так:
./st-tng < 1.html > st-tng.sh
Получился такой файл:
#!/bin/bash
set -e
set -u
mv "./Сезон 1/1x20 - Сердце славы (Heart Of Glory).avi" "./Сезон 1/1x20 — Сердце славы (Heart of Glory).avi"
mv "./Сезон 1/1x24 - Париж навсегда (We'll Always Have Paris).avi" "./Сезон 1/1x24 — Париж навсегда (We'll Always Have Paris).avi"
mv "./Сезон 1/1x16 - Слишком короткий сезон (Too Short A Season).avi" "./Сезон 1/1x16 — Слишком короткий сезон (Too Short a Season).avi"
mv "./Сезон 1/1x23 - Обличье зла (Skin Of Evil).avi" "./Сезон 1/1x23 — Обличье зла (Skin Of Evil).avi"
mv "./Сезон 1/1x25 - Заговор (Conspiracy).avi" "./Сезон 1/1x25 — Заговор (Conspiracy).avi"
mv "./Сезон 1/1x09 - Битва (The Battle).avi" "./Сезон 1/1x09 — Битва (The Battle).avi"
mv "./Сезон 1/1x07 - Чужой среди своих (Lonely Among Us).avi" "./Сезон 1/1x07 — Чужой среди своих (Lonely Among Us).avi"
mv "./Сезон 1/1x10 - Прятки с Кью (Hide And Q).avi" "./Сезон 1/1x10 — Прятки с Кью (Hide and Q).avi"
mv "./Сезон 1/1x26 - Нейтральная зона (The Neutral Zone).avi" "./Сезон 1/1x26 — Нейтральная зона (The Neutral Zone).avi"
mv "./Сезон 1/1x18 - Дым отечества (Home Soil).avi" "./Сезон 1/1x18 — Дым отечества (Home Soil).avi"
mv "./Сезон 1/1x11 - Убежище (Haven).avi" "./Сезон 1/1x11 — Убежище (Haven).avi"
mv "./Сезон 1/1x22 - Симбиоз (Symbiosis).avi" "./Сезон 1/1x22 — Симбиоз (Symbiosis).avi"
mv "./Сезон 1/1x21 - Арсенал свободы (The Arsenal Of Freedom).avi" "./Сезон 1/1x21 — Арсенал свободы (The Arsenal of Freedom).avi"
mv "./Сезон 1/1x03 - Голая действительность (The Naked Now).avi" "./Сезон 1/1x03 — Голая действительность (The Naked Now).avi"
mv "./Сезон 1/1x13 - Знания (Datalore).avi" "./Сезон 1/1x13 — Знания (Datalore).avi"
mv "./Сезон 1/1x08 - Справедливость (Justice).avi" "./Сезон 1/1x08 — Справедливость (Justice).avi"
mv "./Сезон 1/1x19 - Выросший (Coming Of Age).avi" "./Сезон 1/1x19 — Выросший (Coming Of Age).avi"
mv "./Сезон 1/1x05 - Последний форпост (The Last Outpost).avi" "./Сезон 1/1x05 — Последний форпост (The Last Outpost).avi"
mv "./Сезон 1/1x04 - Кодекс чести (Code Of Honor).avi" "./Сезон 1/1x04 — Кодекс чести (Code Of Honor).avi"
mv "./Сезон 1/1x12 - Большой гуд-бай (The Big Goodbye).avi" "./Сезон 1/1x12 — Большой гуд-бай (The Big Goodbye).avi"
mv "./Сезон 1/1x06 - Где никто не был прежде (Where No One Has Gone Before).avi" "./Сезон 1/1x06 — Где никто не был прежде (Where No One Has Gone Before).avi"
mv "./Сезон 1/1x15 - 11001001.avi" "./Сезон 1/1x15 — 11001001 (11001001).avi"
mv "./Сезон 1/1x14 - Ангел-1 (Angel One).avi" "./Сезон 1/1x14 — Ангел-1 (Angel One).avi"
mv "./Сезон 1/1x17 - Когда ветвь ломается (When The Bough Breaks).avi" "./Сезон 1/1x17 — Когда ветвь ломается (When The Bough Breaks).avi"
mv "./Сезон 2/2x18.Up.the.Long.Ladder.(DVDRip.rus).by.Suran.&.Orochimaru-Sama.&.Spaceballs.avi" "./Сезон 2/2x18 — По длинной лестнице (Up the Long Ladder).avi"
mv "./Сезон 2/2x22.Shades.of.gray.(DVDRip.rus).by.Suran.&.Orochimaru-Sama.&.Spaceballs.avi" "./Сезон 2/2x22 — Оттенки серого (Shades of Gray).avi"
mv "./Сезон 2/2x05 - Громкий, как шёпот (Loud as a Whisper).avi" "./Сезон 2/2x05 — Громкий как шепот (Loud as a Whisper).avi"
mv "./Сезон 2/2x08 - Вопрос чести (A Matter of Honor).avi" "./Сезон 2/2x08 — Вопрос чести (A Matter of Honor).avi"
mv "./Сезон 2/2x20.The.Emissary.(DVDRip.rus).by.Suran.&.Orochimaru-Sama.&.Spaceballs.avi" "./Сезон 2/2x20 — Эмиссар (The Emissary).avi"
mv "./Сезон 2/2x10.The.Dauphin.rus.avi" "./Сезон 2/2x10 — Дофин (The Dauphin).avi"
mv "./Сезон 2/2x19.Mmanhunt.(DVDRip.rus).by.Suran.&.Orochimaru-Sama.&.Spaceballs.avi" "./Сезон 2/2x19 — Охота на человека (Manhunt).avi"
mv "./Сезон 2/2x13.Time.Squared.by.Suran.&.Orochimaru-Sama.&.Spaceballs.avi" "./Сезон 2/2x13 — Время в квадрате (Time Squared).avi"
mv "./Сезон 2/2x03 - Элементарно, дорогой Дэйта (Elementary, Dear Data).avi" "./Сезон 2/2x03 — Элементарно, дорогой Дейта (Elementary, Dear Data).avi"
mv "./Сезон 2/2x09.The.Measure.Of.A.Man.rus.avi" "./Сезон 2/2x09 — Критерий человека (The Measure of a Man).avi"
mv "./Сезон 2/2x01 - Дитя (The Child).avi" "./Сезон 2/2x01 — Дитя (The Child).avi"
mv "./Сезон 2/2x17.Samaritan.Snare.(DVDRip.rus).by.Suran.&.Orochimaru-Sama.&.Spaceballs.avi" "./Сезон 2/2x17 — Самаритянская ловушка (Samaritan Snare).avi"
mv "./Сезон 2/2x21.Peak.Performance.(DVDRip.rus).by.Suran.&.Orochimaru-Sama.&.Spaceballs.avi" "./Сезон 2/2x21 — Верх производительности (Peak Performance).avi"
mv "./Сезон 2/2x02 - Молчание в рассрочку (Where Silence Has Lease).avi" "./Сезон 2/2x02 — Молчание в<font color