xshell会话批量迁移到mobaxterm的工具(python小工具)

自己写了一个Python小工具:xshell2mobaxterm,可以将xshell的session转换成mobaxterm的数据文件以导入到mobaxterm中。

exe版的编译好了,博客园不支持附件,所以没法上传,需要的话可以评论留下邮箱,我发送给你。

Python代码:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# xshell session to mobaxterm session file
# Support: TELNET, serial, SSH
# Usage: xshell2mobaxterm.py Xshell_Session_Direcotry
# Example: python3 xshell2mobaxterm.py D:\\Xshell\\Session >mobaxterm.mxtsessions
# Linux platform enviroment: LANG=zh_CN.utf8/en_US.utf8
# Windows: python3.6 cmd run it.

import os, sys


def convert_x2m(xshell_session_file, num):
    #print(xshell_session_file)
    ssh_format = (
        \'[{BookMarks}]\\n\'
        \'SubRep={Directory}\\n\'
        \'ImgNum=41\\n\'
        \'{SessionName} ({UserName})=#109#0%{Host}%{Port}%{UserName}%%-1%-1%%%%%0%0%0%%%-1%0%0%0%%1080%%0%0%1#DejaVu Sans Mono%{FontSize}%0%0%-1%15%236,236,236%30,30,30%180,180,192%0%-1%0%%xterm%-1%-1%_Std_Colors_0_%80%24%0%1%-1%<none>%%0%1%-1#0# #-1\\n\'
    )
    
    telnet_format = (
        \'[{BookMarks}]\\n\'
        \'SubRep={Directory}\\n\'
        \'ImgNum=41\\n\'
        \'{SessionName} ()= #98#1%{Host}%{Port}%%%2%%%%%0%0%%1080%#DejaVu Sans Mono%{FontSize}%0%0%-1%15%236,236,236%30,30,30%180,180,192%0%-1%0%%xterm%-1%-1%_Std_Colors_0_%80%24%0%1%-1%<none>%%0%1%-1#0# #-1\\n\'
    )
    
    serial_format = (
        \'[{BookMarks}]\\n\'
        \'SubRep={Directory}\\n\'
        \'ImgNum=42\\n\'
        \'{SessionName}= #131#8%-2%100{Speed}%3%0%0%1%2%{Port}#DejaVu Sans Mono%{FontSize}%0%0%-1%15%236,236,236%30,30,30%180,180,192%0%-1%0%%xterm%-1%-1%_Std_Colors_0_%80%24%0%1%-1%<none>%%0%1%-1#0# #-1\\n\'
    )

    session_file = open(xshell_session_file, \'r\')
    session_lines = session_file.readlines()
    xshell_attr = {\'num\': num}
    xshell_attr[\'Directory\'] = os.path.dirname(xshell_session_file.replace(sys.argv[1], \'\').strip(\'\\\\\'))
    xshell_attr[\'SessionName\'] = os.path.basename(xshell_session_file).rsplit(\'.\',1)[0]

    if num == 0:
        xshell_attr[\'BookMarks\'] = \'Bookmarks\'
    else:
        xshell_attr[\'BookMarks\'] = \'Bookmarks_{num}\'.format(num=num)

    for line in session_lines:
        if line.startswith(\'UserName=\'):
            xshell_attr[\'UserName\'] = line.split(\'=\')[1].strip(\'\\n\')
        elif line.startswith(\'Port=\'):
            xshell_attr[\'Port\'] = line.split(\'=\')[1].strip(\'\\n\')
        elif line.startswith(\'FontSize=\'):
            xshell_attr[\'FontSize\'] = line.split(\'=\')[1].strip(\'\\n\')
        elif line.startswith(\'Host=\'):
            xshell_attr[\'Host\'] = line.split(\'=\')[1].strip(\'\\n\')
        elif line.startswith(\'Protocol=\'):
            xshell_attr[\'Protocol\'] = line.split(\'=\')[1].strip(\'\\n\')
        elif line.startswith(\'BaudRate=\'):
            xshell_attr[\'Speed\'] = line.split(\'=\')[1].strip(\'\\n\')

    #print(xshell_attr)
    x = 1
    if xshell_attr.get(\'Protocol\').lower().startswith(\'ssh\'):
        x = ssh_format.format(
            Directory = xshell_attr.get(\'Directory\') or \'\',
            SessionName = xshell_attr.get(\'SessionName\') or \'default\',
            UserName = xshell_attr.get(\'UserName\') or \'\',
            Port = xshell_attr.get(\'Port\') or \'22\',
            FontSize = xshell_attr.get(\'FontSize\') or \'12\',
            num=xshell_attr[\'num\'],
            Host=xshell_attr.get(\'Host\') or \'\',
            BookMarks=xshell_attr[\'BookMarks\']
        )
    elif xshell_attr.get(\'Protocol\').lower() == \'telnet\':
        x = telnet_format.format(
            Directory = xshell_attr.get(\'Directory\') or \'\',
            SessionName = xshell_attr.get(\'SessionName\') or \'default\',
            UserName = xshell_attr.get(\'UserName\') or \'\',
            FontSize = xshell_attr.get(\'FontSize\') or \'12\',
            Port = xshell_attr.get(\'Port\') or \'23\',
            num=xshell_attr[\'num\'],
            Host=xshell_attr.get(\'Host\') or \'\',
            BookMarks=xshell_attr[\'BookMarks\']
        )
    elif xshell_attr.get(\'Protocol\').lower() == \'serial\':
        x = serial_format.format(
            Directory = xshell_attr.get(\'Directory\') or \'\',
            SessionName = xshell_attr.get(\'SessionName\') or \'default\',
            FontSize = xshell_attr.get(\'FontSize\') or \'12\',
            Port = xshell_attr.get(\'Port\') or \'\',
            Speed = xshell_attr.get(\'Speed\') or \'9600\',
            num = xshell_attr[\'num\'],
            BookMarks = xshell_attr[\'BookMarks\']
        )
    #print(x.replace(\'/\', \'\\\\\'))
    return x.replace(\'/\', \'\\\\\')


def generate_mobaxterm_sessions(xshell_session_path, count):
    #print(session_path)
    base_dir = os.listdir(xshell_session_path)
    for file in base_dir:
        file = os.path.join(xshell_session_path, file)
        try:
            os.listdir(file)
            #print(file)
            generate_mobaxterm_sessions(file, count)
        except:
            if not file.endswith(\'.xsh\'): continue
            print(convert_x2m(file, count[0]))
            count[0] += 1

if __name__ == \'__main__\':
    count = [0]
    generate_mobaxterm_sessions(sys.argv[1], count)

使用方法:

(1)cmd>python3 Python代码文件 \”Xshell Session所在的路径\” >mobaxterm.mxtsessions

例如:C:\\Users\\user>python3 xshell2moba.py \”C:\\Users\\user\\Documents\\NetSarang\\Xshell\\Sessions\” > mobaxterm.mxtsessions

会在cmd的当前目录(C:\\Users\\user\\)中生成一个mobaxterm.mxtsessions文件

备注:如果不知道Xshell Session的路径,可以在xshell本地命令行中输入pwd命令查看:

xshell会话批量迁移到mobaxterm的工具(python小工具)

(32)将生成的mobaxterm.mxtsessions文件导入mobaxterm即可。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容