自己打造基于命令行的书签管理工具

大多数人都是用浏览器自带的书签管理工具存储url, 虽然这个也挺方便,不过当url多了,即使是分类存放,也不是很好找。于是,我就在琢磨着,能不能自制一个基于命令行的书签管理工具。我只要在命令行敲几个关键词就能直接进入网站,毕竟,对于程序猿而言,命令行是最高效的方式。

有了想法,就动手做吧...

思路分析

  • 最终要的效果是:命令行输入关键词,如果这个关键词所包含的url只有一个,就直接打开网址;如果有多个,就罗列并显示序号,通过序号选择;如果没有找到url,就提示查看现有的url列表

最终效果图

  • 书签存放在文件中,每一行一个书签,便于管理 如:
编程入门指南 v1.5 https://zhuanlan.zhihu.com/p/19959253?columnSlug=xiao-jing-mo
Laravel 教程 - Web 开发实战入门 https://fsdhub.com/books/laravel-essential-training-5.1/
Linux命令大全 http://man.linuxde.net/
  • 原理:用python将书签文件读取,存为列表。获取命令行参数,判断参数是否存在于列表中,如果存在,调用chrome浏览器打开url

代码实现

  • chrome安装路径设置为环境变量,便于调用浏览器

我用的是win10自带的ubuntu子系统

export chrome="/mnt/c/Program\ Files\ \(x86\)/Google/Chrome/Application/chrome.exe"
  • 将书签存储在bookmark.md文件中
  • 操作书签的python代码bookmark.py
#_*_coding:utf8_*_
import sys,os,re
chrome = os.getenv('chrome') # 获取环境变量chrome
keyword = sys.argv[1].lower() # 不区分大小写
url_data = []
file_path = sys.path[0] + '/bookmark.md'

# 需要指定文件编码
with open(file_path, 'rb') as file_object:
    for line in file_object:
        url_data.append(line.decode("UTF-8").strip())

url_arr = []

for url_str in url_data:
    url_str = url_str.lower()
    if keyword in url_str:
        url_arr.append(url_str)

url_len = len(url_arr)

# 获取书签
def getBookbarks(data):
    i = 0
    for x in data:
        print(str(i) + '. ' + x)
        i = i + 1

# 正则匹配url
def matchUrl(url_content):
    url_match = re.search(r"http[^\s]*", url_content)
    url = url_match.group(0).rstrip()
    return url

url = ''
if url_len > 1:
    getBookbarks(url_arr)
    choice = input('选择要进入的url序号\n')
    url = matchUrl(url_arr[int(choice)])
elif url_len == 1:
    url = matchUrl(url_arr[0])
else:
    choice = input('无此书签,是否需要显示所有的书签?y:是 n:否\n')
    if choice == 'y':
        getBookbarks(url_data)

if url:
    print(url)
    os.system(chrome + ' ' + '"' + url + '"')
    exit()
  • 设置程序调用的别名
alias b='python3 /home/wwwroot/script/bookmark/bookmark.py'

如此,一个简便的书签管理器就制作完成了

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏帘卷西风的专栏

使用Cmake生成跨平台项目编译解决方案

    项目最近有需求在windows下面运行,我花了几周时间将linux的服务器移植到windows下面,目前已经能够正常运行服务器,目前又有了新需求,两边的...

1802
来自专栏琯琯博客

laravel 5.4 + dingo api + jwt 代替 Passport

新装一个LV composer create-project --prefer-dist laravel/laravel myApiProject 安装ding...

3038
来自专栏逸鹏说道

后渗透攻防的信息收集

1.0前言 后渗透常见的信息收集思路 延伸: 渗透测试中的技巧 后渗透阶段的攻防对抗 linux入侵后续指南 mimikittenz:又一款Windows密码获...

3746
来自专栏FreeBuf

Android安全几道入门题目

Android系统由于其开源的属性,市场上针对开源代码定制的ROM参差不齐,在系统层面的安全防范和易损性都不一样,android应用市场对app的审核相对 iO...

3725
来自专栏Python、Flask、Django

Mac下菜单管理工具 bartender

911
来自专栏SimpleAI

【内容引起舒适】让你的Jupyter Notebook不再辣眼睛

当时觉得jupyter notebook难看的时候,我就寻思有没有大神做过某些工具来更改样式,毕竟肯定不止我一个人觉得丑,程序员越牛逼,往往Ta就越挑剔。果不其...

701
来自专栏mwangblog

git变基

1082
来自专栏AI派

真是绝了!史上最详细的Jupyter Notebook入门教程

Jupyter Notebook 是一个在浏览器中使用的交互式的笔记本,可以实现将代码、文字完美结合起来,它的受众群体大多数是一些从事数据科学领域相关(机器学习...

4548
来自专栏嵌入式程序猿

MPLAB 工程移植到MPLAB X注意事项

随着这两年Microchip对MPLAB X和XC系列编译器的主推,MPLAB和Hi-tech编译器渐渐停止了更新和维护,所以建议你之前建立在MPLAB和H...

32912
来自专栏琯琯博客

awesome-php-cn软件资源

PHP 资源列表,内容包括:库、框架、模板、安全、代码分析、日志、第三方库、配置工具、Web 工具、书籍、电子书、经典博文等。 依赖管理 依赖和包管理库 Com...

2325

扫码关注云+社区