PDA

Просмотр полной версии : [perl] torrent_renamer


eLWAux
20.11.2008, 20:30
torrent_renamer
by eLWAux
thnk. Kaimi
http://s41.radikal.ru/i092/0811/19/cee6bab9ff55.jpg
скрипт которий переименовивает .torrent
(маски: [torrents.ru].??????????.torrent, где ?- какая то цифра)
на файл с именем первого файла торрента ;)
например:
в папке со скриптом єсть файл: [torrents.ru].13433188.torrent
после запуска скрипт, имя файла будет:
Madagaskar.2.2008.aviю.torrent

для запуска нужет ActivePerl или другая среда

в .pl файле можна изменить:
$dir
папка, в которой переименовываться торренти:
(например: $dir= '.'; -поточная папка
$dir= 'c:\windows' -диск c:, папка windows)

$pr
текст, которий будет добавлен до имени нового файла с самого начала
(например: $pr= 'test'; - тогда все переименование файли будут иметь имя: test????.torrent)

использование:
1( кладем скрипт в папку с торрентами
2( запускаем скрипт
3( после завершения работи, скрипт покажет статистику:
[i] renamed: количесто_переименованих_ф айлов
[%] количесто_перемменованих_ф айлов_в_проценатах% renamed!
4( смотрим в файл result_rename.txt, там полная статистика переименованих и неПереименованих файлов

пример файла result_rename.txt:
renamed: 10 files
71% of all file(s)
==-=--==--=--=-=-=-=-=-=-=-=--==--==-=-=--=-=--==-
before:
==-=--==--=--=-=-=-=-=-=-=-=--==--==-=-=--=-=--==-
Madagaskar.torrent
[torrents.ru].11641143 - Укуренные.torrent
[torrents.ru].11697517.torrent
[torrents.ru].12933424.torrent
[torrents.ru].13433188.torrent
[torrents.ru].13504075.torrent
[torrents.ru].13669520 - Пламя и Цитрон.torrent
[torrents.ru].13743508 - После прочтения cжечь.torrent
[torrents.ru].1776583 - Отступники.torrent
[torrents.ru].4841400 - Аристотель. Все обо всем..torrent

==-=--==--=--=-=-=-=-=-=-=-=--==--==-=-=--=-=--==-
after:
==-=--==--=--=-=-=-=-=-=-=-=--==--==-=-=--=-=--==-
Madagaskar.2.2008.avi.torrent
ђЈђє‘ѓ‘ЂђµђЅђЅ‘‹ђµ.torrent
Hackers_1995_HDRip_Rus_PowerTracker.org.avi.torren t
Vavilon.2008.P.DVDRip.KINODOME.avi.torrent
ANNIHILATION2.avi.torrent
sway_gaming.avi.torrent
Plamja.i.Citron.2008.P.DVDRip_INTERFILM.avi.torren t
posle_proctenia_AVC.mkv.torrent
Otstupniki.avi.torrent
Aristotel.avi.torrent

==-=--==--=--=-=-=-=-=-=-=-=--==--==-=-=--=-=--==-

not renamed:
==-=--==--=--=-=-=-=-=-=-=-=--==--==-=-=--=-=--==-
Antix-M7.2.zip.torrent
menuetos-x86-0.84.qcow.img.zip.torrent
mona-0.3.0a8.qcow.img.zip.torrent
my.torrent

єсли отредактировать скрипт и сделать так что $pr='[torrent]';

тогда после работи скрипта в файле result_rename.txt ми увидем следуеще:
renamed: 14 files
100% of all file(s)
==-=--==--=--=-=-=-=-=-=-=-=--==--==-=-=--=-=--==-
before:
==-=--==--=--=-=-=-=-=-=-=-=--==--==-=-=--=-=--==-
Antix-M7.2.zip.torrent
Madagaskar.torrent
menuetos-x86-0.84.qcow.img.zip.torrent
mona-0.3.0a8.qcow.img.zip.torrent
my.torrent
[torrents.ru].11641143 - Укуренные.torrent
[torrents.ru].11697517.torrent
[torrents.ru].12933424.torrent
[torrents.ru].13433188.torrent
[torrents.ru].13504075.torrent
[torrents.ru].13669520 - Пламя и Цитрон.torrent
[torrents.ru].13743508 - После прочтения cжечь.torrent
[torrents.ru].1776583 - Отступники.torrent
[torrents.ru].4841400 - Аристотель. Все обо всем..torrent

==-=--==--=--=-=-=-=-=-=-=-=--==--==-=-=--=-=--==-
after:
==-=--==--=--=-=-=-=-=-=-=-=--==--==-=-=--=-=--==-
[torrent]Antix-M7.2.zip.torrent
[torrent]Madagaskar.2.2008.avi.torrent
[torrent]menuetos-x86-0.84.qcow.img.zip.torrent
[torrent]mona-0.3.0a8.qcow.img.zip.torrent
[torrent]my.torrent
[torrent]ђЈђє‘ѓ‘ЂђµђЅђЅ‘‹ђµ.torrent
[torrent]Hackers_1995_HDRip_Rus_PowerTracker.org.avi.torren t
[torrent]Vavilon.2008.P.DVDRip.KINODOME.avi.torrent
[torrent]ANNIHILATION2.avi.torrent
[torrent]sway_gaming.avi.torrent
[torrent]Plamja.i.Citron.2008.P.DVDRip_INTERFILM.avi.torren t
[torrent]posle_proctenia_AVC.mkv.torrent
[torrent]Otstupniki.avi.torrent
[torrent]Aristotel.avi.torrent

==-=--==--=--=-=-=-=-=-=-=-=--==--==-=-=--=-=--==-

not renamed:
==-=--==--=--=-=-=-=-=-=-=-=--==--==-=-=--=-=--==-

как видно все переименование файли сначала имеют текст:
[torrent], то что ми установили в $pr..

p.s.:
1( скрипт некорректо отображает UTF8 текст, как исправить незнаю; кто подскажет, буду только рад)
2( все замечания\предложения пишем тут

также, я через несколько дней доделаю скрипт, которий проверяет какие торренти загружени, какие нет, и в соответствии перемещает торретки в другие папки..

==-=--==--=--=-=-=-=-=-=-=-=--==--==-=-=--=-=--==-
==-=--==--=--=-=-=-=-=-=-=-=--==--==-=-=--=-=--==-
==-=--==--=--=-=-=-=-=-=-=-=--==--==-=-=--=-=--==-
perl::code
system('cls');

################################################## ########################
################################################## ########################
################################################## ########################

$dir = '.'; #without /
$pr = '[torrent]';

################################################## ########################
################################################## ########################
################################################## ########################

sub saveFile
{
open(myFILE,">$_[0]") || die "error: $!";
print myFILE $_[1];
close(myFILE);
}

sub cyr #Kaimi modifed
{
($_)=@_;
y/А-яЁё/\x80-\xaf\xe0-\xf1/;
return $_;
}

sub read_str
{
if ($_[0] =~ /:$_[1](\d{0,4}):/)
{return substr($_[0], index($_[0],$_[1])+length($_[1])+length($1)+1, $1)}
else {return '';}
}

sub read_num
{
if ($_[0] =~ /$_[1]i(\d{0,64})e/)
{return $1} else {return ''}
}

sub rename_torrent #Kaimi modifed
{
my $new_name;
$new_name=cyr(read_str($_[0],'name'));
$new_name=~s/\[torrents.ru\]//ge;
return $new_name.'.torrent';
}

################################################## ########################
################################################## ########################
################################################## ########################

system('cls');

print "--====--=--=- eLWAux -=-==-====--\n";
print "--===-== torrent renamer -=-===--\n";
print "--====-==-=-=-=-=-=-=-=--==-===--\n\n";

opendir(TEMPDIR,$dir) or die("[-] Error ($!)..");
@FILES=grep(/\.torrent$/i, readdir TEMPDIR);
closedir(TEMPDIR);

print '[i] '.@FILES." *.torrent's found\n";
print '[i] '.localtime(time())."\n";

print "--====-==-=-=-=-=-=-=-=--==-===--\n\n";

$g=0;$bef='';$aft='';$nren='';
foreach my $file(@FILES) {
$res='';
open(DESC, $file);
read(DESC,$res,-s $file);
close(DESC);

print ' '.cyr($file)."\n";
$n = $pr.rename_torrent($res);
if ($n eq $file)
{ print '[-] '.$n."\n";
$nren.=$n."\n";
} else
{ $g++;
rename $file,$n;
$bef.=$file."\n";
$aft.=$n."\n";
print '[+] '.$n."\n";
}
$i++;
}

print '[i] renamed: '.$g."\n";
print '[%] '.int(($g/@FILES)*100).'% renamed!';

saveFile('result_rename.txt',
"renamed: $g files\n".
" ".int(($g/@FILES)*100)."% of all file(s)\n".
"==-=--==--=--=-=-=-=-=-=-=-=--==--==-=-=--=-=--==-\n".
"before:\n".
"==-=--==--=--=-=-=-=-=-=-=-=--==--==-=-=--=-=--==-\n".
$bef."\n".
"==-=--==--=--=-=-=-=-=-=-=-=--==--==-=-=--=-=--==-\n".
"after:\n".
"==-=--==--=--=-=-=-=-=-=-=-=--==--==-=-=--=-=--==-\n".
$aft."\n".
"==-=--==--=--=-=-=-=-=-=-=-=--==--==-=-=--=-=--==-\n".
"\nnot renamed:\n".
"==-=--==--=--=-=-=-=-=-=-=-=--==--==-=-=--=-=--==-\n".
$nren."\n");
<STDIN>;

MaTpOc
22.11.2008, 22:34
А можно поподробней для чего и что делает этот скрипт.

rushter
22.11.2008, 22:41
Для удобства :)

eLWAux
23.11.2008, 00:09
А можно поподробней для чего и что делает этот скрипт.
когда качаеш торренти, то они имеют названия, типа: [torrent].12937198.torrent или что то подобное..; так вот насобиралося у тебя (как у меня;) штук 100таких файлов с непонятним названиям.. смотриш ти на весь єтот бред и думаеш "блин.. и что я с єтого посмотрел?".. можна каждий торрент по-очереди в прогу кидать и смотреть что за торрент., но єто не виход, так как 100 файлов заи**ся смотреть..

так вот я написал скрипт, которий єти все торренти с непонятним названиям переименовивает в "нормальний" вид..
пр: нашел ти на форуме torrents.ru фильм бригаду. скачал торрент 1239888217.torrent. закачал бригаду. посмотрел. удалил фильм. скачал потом єщо один фильм, єщо один, .... и так насобиралось много торрентов. и ти внось захотел посмотреть бригаду, но не помниш названия торрета. кладеш скрипт в папку с єтими *.torrent файлами, запускаеш. после завершения роботи скрипт переименует 1239888217.torrent в Brigada.torrent

а в общем , скрипт просто для удобства)
превращает "мусор" в ценность)

Kaimi
23.11.2008, 00:52
sub cyr
{
$phrase = shift;
$phrase =~ y/А-яЁё/\x80-\xaf\xe0-\xf1/;
return $phrase;
}


Моно сделать так

sub cyr
{
($_)=@_;
y/А-яЁё/\x80-\xaf\xe0-\xf1/;
return $_;
}



open(DESC, @FILES[$i]);
while (<DESC>) {$res.= $_;}
close(DESC);


open(DESC, $FILES[$i]);
read(DESC,$res,-s $FILES[$i]);
close(DESC);



for ($i=0;$i<@FILES;) {

мне кажется так красивее

foreach my $file(@FILES) {



sub rename_torrent
{
local $new_name,$old_name;

$old_name=$_[0];
$new_name=cyr(read_str($_[0],'name'));
$new_name=~s/\[torrents.ru\]//ge;
return $new_name.'.torrent';
#rename old new
}


А зачем переменная $old_name ? зачем юзать local? в мануале вроде пишут что лучше my юзать...

eLWAux
23.11.2008, 01:54
Kaimi, спасибо за ошибки)
кстате, sub cyr твоя функция)

Solker
23.11.2008, 02:00
То же самое, только на PHP и в 2 раза меньше.
Плюс корректно работает с UTF-8.

<?php

$dir = scandir('.');
foreach($dir as $filename)
{
if($filename == '.' or $filename == '..') continue;
if(substr($filename,-7) != 'torrent') continue;

$handle = fopen($filename, "r");
$buffer = fgets($handle, 4096);
fclose($handle);

preg_match('#\[torrents.ru\].(.+?).torrent#',$filename,$id);
$result = explode(':', $buffer);

foreach($result as $key => $date)
{
if(substr($date,0,4)=='name') {
$name = str_replace(' ','.',substr($result[$key+1],0,strlen($result[$key+1])-2));
break;
}
}

if(detectUTF8($name)) $name = iconv('UTF-8', 'windows-1251', $name);

echo "[{$id[1]}].$name.torrent<br>\n"; //Or Rename File
}

function detectUTF8($string)
{
return preg_match('%(?:
[\xC2-\xDF][\x80-\xBF] # non-overlong 2-byte
|\xE0[\xA0-\xBF][\x80-\xBF] # excluding overlongs
|[\xE1-\xEC\xEE\xEF][\x80-\xBF]{2} # straight 3-byte
|\xED[\x80-\x9F][\x80-\xBF] # excluding surrogates
|\xF0[\x90-\xBF][\x80-\xBF]{2} # planes 1-3
|[\xF1-\xF3][\x80-\xBF]{3} # planes 4-15
|\xF4[\x80-\x8F][\x80-\xBF]{2} # plane 16
)+%xs', $string);
}

?>

Не понимаю, зачем под такой бред создавать отдельную тему, и ставить свои копирайты.

Kaimi
23.11.2008, 02:11
кстате, sub cyr твоя функция)

Эм, это где ты у меня её видел?

eLWAux
23.11.2008, 14:04
Не понимаю, зачем под такой бред создавать отдельную тему, и ставить свои копирайты.
Solker,
тема создана чтоб показать роботу с torrent'ами на перле
копирайти поставил потому что я написал с нуля сам
detectUTF8 всегда можно добавить
размер моего скрипта больше твоего (єсли єто твой скрипт..) потому что у меня все разбито про функциях, єсли все слепить, то получиться не больше твоего

Эм, это где ты у меня её видел?
точно не помню, но вроде где-то в разделе "для новичков" ;)

Solker
23.11.2008, 16:38
1( скрипт некорректо отображает UTF8 текст, как исправить незнаю; кто подскажет, буду только рад)
detectUTF8 всегда можно добавить
Ну так и добавь.

eLWAux
24.11.2008, 22:08
up

Kaimi, ошибки исправил) спасибо)
Solker, UTF поддержки пока нет)