Пользуясь торрент-клиентом Deluge и обнаружив существенные неудобства, решил подыскать альтернативу и остановился на KTorrent. Так как к тому времени в Deluge имелось немалое количество закачек и раздач, то написал скрипт для переноса этого добра.
Что не устроило в Deluge?
Общая причина одна — отнимает много времени при использовании, ибо:
- Создаёт «пустые» файлы и каталоги для неотмеченных при закачке файлов/каталогов.
- Неудобная реализация выбора каталога для сохранения содержимого закачек (если используются разные каталоги).
- По непонятной причине некоторые раздачи иногда самопроизвольно останавливаются (несмотря на отсутствие ограничений в настройках).
Почему переход именно на KTorrent?
KTorrent лишён вышеприведённых недостатков Deluge, при этом по функционалу и отзывчивости не уступает. Памяти потребляет примерно столько же, несмотря на kde'шные библиотеки. Что же касается других торрент-клиентов, то они не дотягивают до функционала Deluge и KTorrent. Лишь qBittorrent мог стать альтернативой, но он забанен на pornolab'е и всё-таки создаёт пустые каталоги (с «пустыми» файлами проблема решена).
Итак, изучая регулярные выражения и консольные юникс-утилиты, написал скрипт для переноса делюговских закачек и раздач.
Хотелось бы обратить внимание на тройку вещей:
- Статус неотмеченных для закачки файлов в мультифайловых раздачах не перенесётся (т.е. по умолчанию будут все отмечены).
- Когда запустите KTorrent, то все перенесённые раздачи/закачки будут остановлены и нужно будет их перехешировать, выделяя каждую раздачу и нажимая SHIFT+C (более быстрого способа не нашёл. В некоторых торрент-клиентах достаточно нажать «стартовать все», но KTorrent в этом случае будет перезакачивать, а не перехешировать).
- Работоспособность проверялась на Ubuntu 12.04, Deluge 1.3.5, KTorrent 4.1.3
#!/bin/bash
#Deluge2KTorrent script
#written by takiz aka dadd
printf '%s\n' '...ждите...';
#отсеиваем пути к файлам из torrents.state и фиксим русскую кодировку
egrep '^S.\/' ~/.config/deluge/state/torrents.state | sed -e 's/^..//;s/.$/\//;s/\//#/g' > paths;
t=`cat paths`; printf '%b\n' $t > paths;
#отсеиваем названия торрентов и удаляем дублирующиеся по одному из каждой пары
egrep '[0-9a-zA-Z]{22,99}' ~/.config/deluge/state/torrents.state | sed -e 's/^..//;s/.$//' | perl -ne 'print unless $U{$_};$U{$_}=1;' > torrents;
#создаём временный файл скрипта для создания каталогов и запускаем
printf '%b\n' '#!/bin/bash\nmkdir ~/.kde/share/apps/ktorrent/tor{1..100500}' > temp1.sh; chmod 774 temp1.sh;
strok=`sed -n '$=' torrents`; sed -i -e 's/100500/'$strok'/' temp1.sh; ./temp1.sh;
#создаём скрипт копирования и запускаем
printf '%s\n' '#!/bin/bash' > temp2.sh; chmod 774 temp2.sh;
cat torrents | awk '{print $0".torrent ~/.kde/share/apps/ktorrent/tor"NR"/torrent"}' | sed 's/^/cp ~\/\.config\/deluge\/state\//' >> temp2.sh; ./temp2.sh;
sleep 10;
#создаём шаблон stats
printf '%b\n' 'AUTOSTART=0\nOUTPUTDIR=' > stats;
#создаём stats файлы с путями
a=2; while read f2; do sed -e "1,/.*/{n;s/\(.*\)/\1$f2/}" stats >stats$a; a=$(($a + 1)); done < paths; sed -i -e 's/#/\//g' stats*;
#добавляем в скрипт копирования пути stats и запускаем
cat temp2.sh | awk '{sub(/\~\/[^ ]*\.torrent/, "stats"NR)}1' | sed 's/\/torrent/\/stats/;s/cp st/mv st/' > tmpfile; mv tmpfile temp2.sh; chmod 774 temp2.sh; ./temp2.sh;
sleep 5;
#удаляем временные файлы
rm paths torrents stats temp1.sh temp2.sh;
printf '%s\n' 'ok';