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

gof: 一个用 Go 语言来写 extension 进行自由定制的文件/文件夹处理器

  •  
  •   SuperMild ·
    ahui2016 · 2021-12-01 09:15:37 +08:00 · 1568 次点击
    这是一个创建于 876 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在日常使用电脑的过程中,总有一些关于文件 /文件夹的操作是有规律、有重复性的,比如:

    • 对调两个文件的文件名
    • 把指定文件备份到指定文件夹,并自动改名
    • 把指定文件移动到指定文件夹,并自动删除超过 n 天的旧文件
    • 复制文件并且在复制结束后校验文件完整性
    • 按你喜欢的方式单向 /双向同步两个文件夹(具体就看扩展代码怎样写了)
    • ……等等

    一般可能会用 shell 、Python, 或者用专门的 GUI 程序来处理这些问题。但 GUI 程序的可定制性通常不高,每次使用都需要多次点击,或者每个 GUI 程序都有局限性,不如脚本一个命令解决问题那么清爽、那么灵活。而 shell 、Python 又有要么每次重新写,要么需要管理一堆散乱的脚本文件、要对每个命令起名等一些繁琐的地方。

    并且脚本代码如果越写越长的时候,可维护性就会显著变差,因此,我做了一个用 Go 语言来写 extension 进行自由定制的文件 /文件夹处理器: gof

    gof 本身的功能

    gof 本身并不包含任何解决实际问题的代码,比如对文件进行改名、复制、移动等操作都不包含,这些都由插件 /扩展(在 gof 里称为 recipe )来实现,需要什么功能,就自己写一个 recipe 。

    gof 本身的作用是:

    1. 对插件 /扩展( recipe )进行统一管理。 比如 recipe 文件都集中在一个文件夹,拥有统一的 CLI 格式,显得井井有条。
    2. 利用 YAML 来写任务计划。 因此作为开发者写插件的时候不需要处理 GUI 问题,作为使用者可非常直观地编辑 YAML 文件。
    3. 一个 YAML 文件里可包含多个任务。 每个任务可以采用不同的 recipe, 不同的参数、处理相同或不同的文件, gof 会按顺序依次执行。插件编写者只需要专心写一个插件即可,不需要操心任务是如何组合排列的。
    4. 提供了 -dump 功能。 用来预览即将执行的任务计划,而不实际执行,特别是刚开始对命令不太熟悉的时候,该功能非常实用,可以通过预览任务计划提早发现问题,确认没问题后再去掉 -dump 实际执行。

    其中 CLI 与 YAML 的配合效果很不错,YAML 很直观,容易编辑,比纯 CLI 更直观,又比 GUI 更容易开发。

    当然,如果你不喜欢或不熟悉 Go 语言,完全可以用其他语言来重写一个类似的程序,因为 gof 本身的功能不多,代码量很少,我全新写的用了两天(有效时间大概 8 个小时),在有参考的情况下用另一种语言改写,半天绝对足够了。

    源码仓库

    https://github.com/ahui2016/gof

    (国内镜像 https://gitee.com/ipelago/gof

    rekulas
        1
    rekulas  
       2021-12-01 16:20:04 +08:00
    想法很好,但灵活性感觉不够,如果某个插件例如 swap 逻辑要调整,那不但要改插件也要改 yaml
    所以我还是选 shell 😁
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3350 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 12:29 · PVG 20:29 · LAX 05:29 · JFK 08:29
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.