V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
spacewander
V2EX  ›  分享创造

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

  •  1
     
  •   spacewander ·
    spacewander · 2015-07-13 09:51:44 +08:00 · 3006 次点击
    这是一个创建于 3203 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    上截图:
    example

    在几个月前的某日,因为再也忍受不了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什么的最棒了。

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

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

    http://i3.tietuku.com/7c59579682d2cacf.gif
    Clarencep
        9
    Clarencep  
       2015-07-22 09:50:59 +08:00
    v2ex不能发gif图片么
    spacewander
        10
    spacewander  
    OP
       2015-07-26 22:50:52 +08:00
    @Clarencep
    好像直接用find命令也是没有输出的,所以这个包装器也没有输出。
    另外据说v2ex只能发用微博做图床的图片
    Clarencep
        11
    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
        12
    spacewander  
    OP
       2015-07-27 23:09:34 +08:00
    @Clarencep
    感谢你的认真反馈!有人这么认真对待拙作的bug,我真心感动。
    今晚我测试了下,在第一次release的1.2版本可以重现这个bug。好在这个bug在之后的版本里都fix掉了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   4149 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 05:26 · PVG 13:26 · LAX 22:26 · JFK 01:26
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.