• TAGS: PT

命令行替换

找到 fastresume 文件

执行替换

注意使用 GNU Sed(gsed),替换时注意 pattern 中的需要替换tracker的字符数量。

sed -i 's!15:http://test\.com!16:http://tjupt.org!g' *.fastresume

油猴脚本

https://greasyfork.org/zh-CN/scripts/391688-%E6%B0%B4%E6%B0%B4-qbittorrent-%E7%AE%A1%E7%90%86%E8%84%9A%E6%9C%AC

Python 脚本

https://github.com/Stat1cV01D/bt_trackers_replacer/blob/master/tracker_replace.py

import glob
import os
import re
import sys


trackers_section_exp = re.compile(b'trackersll(\d+:.*)ee\d+:')
tracker_len_exp = re.compile(b'(el)?(\d+):')

print('Simple tool to replace tracker info in *.fastresume files v0.1')

if len(sys.argv) != 3:
    print('Usage: ' + sys.argv[0] + ' <old tracker> <new tracker> ')
    print('*.fastresume files must be in BT_backup folder beside the script')
    sys.exit(1)

old_text = sys.argv[1].encode('utf-8')
new_text = sys.argv[2].encode('utf-8')

os.chdir('BT_backup')

for file in glob.glob('*.fastresume'):
    with open(file, 'rb') as f:
        data = f.read()

    if old_text not in data:
        print('Skippping ' + file)
        continue

    print('Found item in ' + file)
    trackers_section = re.search(trackers_section_exp, data)
    if not trackers_section:
        continue
    trackers = trackers_section.group(1)

    tracker_list = []
    i = 0
    while i < len(trackers):
        len_found = re.search(tracker_len_exp, trackers[i:])
        tracker_len = int(len_found.group(2))
        i += len_found.end()
        tracker = trackers[i:i+tracker_len]
        if tracker.find(old_text) != -1:
            new_tracker = tracker.replace(old_text, new_text)
            print(' Replacing ' + tracker.decode('utf-8') + ' with ' + new_tracker.decode('utf-8'))
            tracker = new_tracker
        tracker_list.append(str(len(tracker)).encode('utf-8') + b':' + tracker)
        i += tracker_len

    data = data.replace(trackers, b'el'.join(tracker_list))
    with open(file, 'wb') as f:
        f.write(data)