我写了个 200 行的命令行工具,替代了那个臃肿的 GUI

起因很具体:我每天都要把一批文件从一个目录搬到另一个,按规则重命名、按日期建子目录、顺手打个压缩包。公司配的那个内部工具是个图形界面,点七次才能完成一次操作。

我花了半个下午,写了 200 行 Python,替代了它。

那个具体的痛点

流程是固定的:拉取 → 筛选 → 重命名 → 归档 → 打包。七次点击,每次都有概率点错。而且 GUI 没法批量、没法放进定时任务。

它的功能很多,但我要的只是这一条流水线。

设计:一条命令,五个动作

工具的接口只有一个命令,五个选项:

wf process --src ./in --dst ./out --pattern "{date}_{name}" --zip --since 7d

没有子命令,没有交互式菜单。参数写在一行里,可以放进 shell 脚本,也可以加进 crontab。

我主动没做的事

  • 没有配置文件的支持。参数够少,命令行就能记全。
  • 没有日志系统。出错就打印到 stderr,成功了就安静。
  • 没有进度条。一次处理几十个文件,没必要。
  • 没有单元测试。它只服务我一个人,坏了我自己会知道。

这些都不是「偷懒」,是刻意的选择。功能越多,维护成本越高;而维护成本最终会变成拖延。

够用,是个好目标

这个工具我用了快一年。期间只改过两次:一次是源目录结构变了,一次是我想要一个干跑(dry-run)的选项。两次都是十行以内的改动。

如果当初我按「通用工具」的标准来写,它会多三千行代码、两个依赖、和一个我从来没填过的配置项。现在它躺在我的 ~/bin 里,占 7KB。

顺带一提

我把同样的思路用在了照片整理上,就是 snap-renamer。思路一样:读 EXIF、按日期重命名、出错就报错,其余一概不管。

小工具的好处就在这里:写起来快,改起来快,扔掉也不心疼。