给 find(1)包装一个终端界面

2015-07-13 09:51:44 +08:00
 spacewander

用Python给find(1)写了个终端界面(TUI)。正确的用法是点点点,然后就会拼装出对应的命令,接下来敲回车或者点击运行,实际的任务就会交由find完成。

上截图:

在几个月前的某日,因为再也忍受不了find的难用,所以心血来潮,开始给它写一个TUI。之所以写的是终端界面而不是一般的GUI,是因为一般是在终端中运行find,如果是GUI的话,在VPS上就用不了了。

其实如果追求效率和自由度的话,直接在命令行里面敲好了,无须加多一层界面。

不过find跟其它coreutils不同,它接受的选项是如此地复杂,以至于实际上就是一门用于查询的小DSL。即使之前用了很多次,每次用的时候我还是需要man find一下。所以这个小玩意就是把man find里面的东西,搬到了终端界面上。当然除此之外,我还给它实现了一定的补全功能和添加了常用选项的例子(相当于cheet)。还有快捷键的功能……嗯,就是尽量向命令行的效率靠齐。

用法?就是在终端中敲findtui,接着根据想要查询的方向,点击对应的菜单(比如想查某段时间内修改过的文件,就点击Time菜单),然后选择某个子选项,输入想要的值。就像填表一样。

安装方式也跟它的用法一样简洁直白,就是一行sudo pip install findtui

项目代码在: https://github.com/spacewander/find

因为本人水平有限,界面写得甚挫。如果你对改善这个小玩意感兴趣,或者发现了活蹦乱跳的BUG,欢迎提issue和pr。当然也欢迎阅读它的实现代码,code review什么的最棒了。

3018 次点击
所在节点    分享创造
12 条回复
Shazoo
2015-07-13 16:32:24 +08:00
显然先star下~
Clarencep
2015-07-15 10:50:42 +08:00
试用了下,然后才发现——原来find还有这么多参数我还不知道,一直只用`find . -type f`...
只是偶选了各种参数后,然后按回车,再然后就没然后了... 什么输出都没有,什么错误提示都没有程序就退出了...
townboy
2015-07-15 15:16:51 +08:00
真棒~
spacewander
2015-07-15 18:32:51 +08:00
@Clarencep
还记得输入的是什么参数吗?我debug一下看看。如果原本find命令就是找不到任何东西的,那么按回车之后就没有输出。
spacewander
2015-07-15 19:46:46 +08:00
我刚刚更新了下代码,现在如果组装的命令出错,会把错误信息转发出来。
`sudo pip install findtui --upgrade`就可以升级啦。
sobigfish
2015-07-16 17:34:55 +08:00
赞,可惜os x 下的find 没有n `illegal option -- n`
Clarencep
2015-07-22 09:49:58 +08:00
很简单的参数,就是main.py自己,然后执行test,如下图:

http://i3.tietuku.com/7c59579682d2cacf.gif
Clarencep
2015-07-22 09:50:36 +08:00
@spacewander 很简单的参数,就是main.py自己,然后执行test,如下图:

http://i3.tietuku.com/7c59579682d2cacf.gif
Clarencep
2015-07-22 09:50:59 +08:00
v2ex不能发gif图片么
spacewander
2015-07-26 22:50:52 +08:00
@Clarencep
好像直接用find命令也是没有输出的,所以这个包装器也没有输出。
另外据说v2ex只能发用微博做图床的图片
Clarencep
2015-07-27 09:49:01 +08:00
@spacewander 但是生成的命令好像有问题, 本来是想生成find -name main.py -exec test 的,但是实际生成的是find -name main.py -exec test -exec tes -exec te -exec t
....
spacewander
2015-07-27 23:09:34 +08:00
@Clarencep
感谢你的认真反馈!有人这么认真对待拙作的bug,我真心感动。
今晚我测试了下,在第一次release的1.2版本可以重现这个bug。好在这个bug在之后的版本里都fix掉了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/205242

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX