Python如何生成命令词与仓库编号组合,适配MacOS Spotlight执行场景
最优实现方案
前置规则对齐(先消除冗余,避免生成无效文件)
因为你提到命令顺序不影响执行效果,我们先统一规则合并语义相同的命令,减少生成的文件量:
- 单个命令词在文件名中最多出现1次:如
run1run2和run12完全等价,仅保留后者 - 单个命令词后接的仓库编号统一按升序排列、去重:如
run21和run12等价,仅保留run12 - 多个命令块统一按固定顺序拼接:按
run→pull→code→browser的固定顺序排列,如pull2run1等价于run1pull2,仅保留后者
核心实现思路
所有生成的小可执行文件不需要写独立逻辑,统一调用你自己实现的核心解析脚本即可,文件内容固定为:
#!/bin/bash # 替换为你自己的核心脚本绝对路径 /Users/你的用户名/.spotlight-cmd/core-handler "$0"
核心脚本只需要接收文件名作为入参,自己拆分解析命令词和对应的仓库编号,执行对应逻辑即可。
批量生成代码示例(Python)
import os from itertools import product # 配置项 COMMANDS = ['run', 'pull', 'code', 'browser'] REPOS = [0,1,2,3,4,5,6] CMD_DIR = os.path.expanduser('~/.spotlight-cmd/executables') EXEC_CONTENT = '''#!/bin/bash /Users/你的用户名/.spotlight-cmd/core-handler "$0" ''' # 创建存储目录 os.makedirs(CMD_DIR, exist_ok=True) # 生成每个命令对应的所有非空仓库组合 cmd_options = [[]] # 空选项代表不使用该命令 for cmd in COMMANDS: opts = [] # 遍历所有非空仓库子集 for mask in range(1, 1 << len(REPOS)): selected_repos = ''.join(str(REPOS[i]) for i in range(len(REPOS)) if mask & (1 << i)) opts.append(f"{cmd}{selected_repos}") cmd_options.append(opts) # 生成所有合法命令组合 for combo in product(*cmd_options): if not combo: continue # 跳过全空组合 filename = ''.join(combo) file_path = os.path.join(CMD_DIR, filename) with open(file_path, 'w') as f: f.write(EXEC_CONTENT) os.chmod(file_path, 0o755) # 加可执行权限
优化建议
如果觉得全量生成2亿+文件太多(实际常用场景不会同时使用多个命令),可以限制最多同时使用2-3个命令,文件量会降到数十万级别,完全符合你的预期:
- 仅生成1个命令块:4 * 127 = 508个
- 仅生成2个命令块:C(4,2) * 127 127 = 616129=96774个
- 仅生成3个命令块:C(4,3)127^3=42048383=8193532个,不需要的话可以直接砍掉
配套配置
把你存放可执行文件的目录~/.spotlight-cmd/executables加到MacOS的Spotlight索引列表中,同时可以在Time Machine中排除该目录,避免占用备份空间。
内容的提问来源于stack exchange,提问作者uber
相关产品推荐
相关产品推荐

