给 find(1)包装一个终端界面 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
spacewander
V2EX    分享创造

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

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

    用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`就可以升级啦。
    run2
        6
    run2  
      &nbp;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     Solana     5222 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 09:30 PVG 17:30 LAX 02:30 JFK 05:30
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86