LINUX.ORG.RU

Сообщения dadd

 

Переходим с Deluge на KTorrent

Форум — General

Пользуясь торрент-клиентом 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';

 ,

dadd
()

Редактирование строк

Форум — General

Имеется текстовый файл (на самом деле в нём строк больше, но для простоты возьмём три):

$ cat ex.txt
aaa
bbb
ccc
Хочется добавить в конец каждой строки расширение «.tk_номер_строки». Делаю:
cat ex.txt | for i in $(seq 1 3); do sed 's/$/'.tk$i'/'; done
Но в результате везде добавляется .tk1 вместо ожидаемых .tk2 и .tk3. Помогите разобраться.

dadd
()

Переназначение кнопки мыши

Форум — Desktop

Имеется кнопка мыши, которая эмулирует двукратное нажатие левой кнопки:

~$ xev | grep button
    state 0x10, button 1, same_screen YES
    state 0x110, button 1, same_screen YES
    state 0x10, button 1, same_screen YES
    state 0x110, button 1, same_screen YES

Хочется, чтобы она выполняла те же действия, что и button 2:

~$ xev | grep button
    state 0x10, button 2, same_screen YES
    state 0x210, button 2, same_screen YES

Как это сделать, чтобы при этом двукратное нажатие левой кнопки мыши работало по дефолту?

dadd
()

RSS подписка на новые темы