Игорь Пашев - Post a comment

Aug. 28th, 2010

[info]igorpashev

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

Read Comments

Reply:

From:
(will be screened)
Identity URL: 
имя пользователя:    
Вы должны предварительно войти в LiveJournal.com
 
E-mail для ответов: 
Вы сможете оставлять комментарии, даже если не введете e-mail.
Но вы не сможете получать уведомления об ответах на ваши комментарии!
Внимание: на указанный адрес будет выслано подтверждение.
Username:
Password:
Subject:
No HTML allowed in subject
Message: