惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Y
Y Combinator Blog
博客园 - 司徒正美
TaoSecurity Blog
TaoSecurity Blog
Martin Fowler
Martin Fowler
T
Threat Research - Cisco Blogs
Blog — PlanetScale
Blog — PlanetScale
S
Secure Thoughts
博客园 - 三生石上(FineUI控件)
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
K
Kaspersky official blog
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Cisco Talos Blog
Cisco Talos Blog
H
Help Net Security
博客园 - 叶小钗
爱范儿
爱范儿
GbyAI
GbyAI
I
Intezer
M
MIT News - Artificial intelligence
Latest news
Latest news
Schneier on Security
Schneier on Security
T
Tor Project blog
Simon Willison's Weblog
Simon Willison's Weblog
I
InfoQ
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
C
CXSECURITY Database RSS Feed - CXSecurity.com
罗磊的独立博客
N
News and Events Feed by Topic
T
The Blog of Author Tim Ferriss
V2EX - 技术
V2EX - 技术
B
Blog
T
Tailwind CSS Blog
N
Netflix TechBlog - Medium
Security Latest
Security Latest
V
V2EX
F
Fortinet All Blogs
Forbes - Security
Forbes - Security
Application and Cybersecurity Blog
Application and Cybersecurity Blog
The Hacker News
The Hacker News
Scott Helme
Scott Helme
P
Privacy International News Feed
P
Palo Alto Networks Blog
H
Heimdal Security Blog
C
Cisco Blogs
T
The Exploit Database - CXSecurity.com
博客园 - Franky
酷 壳 – CoolShell
酷 壳 – CoolShell
G
Google Developers Blog
W
WeLiveSecurity
L
LINUX DO - 最新话题

少数派

派早报:Google 发布 Fitbit Air 等 - 少数派 「新人报到」確認需求,再開始 - 少数派 从 SOLO 独立开发者社区,我看到了越来越多开发者开始做自己的产品 - 少数派 我怎么管理那些"不常做,但总会忘"的生活事项 - 少数派 人形机器人量产元年,数据才是具身智能的“生死线” - 少数派 BuhoLaunchpad 高度还原 Mac 启动台:开发历程与思考 - 少数派 五年陪伴依然不舍,DIY 换壳后让罗技 MX Master 3 继续服役 - 少数派 新玩意 240|少数派的编辑们最近买了啥? - 少数派 一日一技|为什么你应该关闭 iOS 的键盘声音 - 少数派 我做了个插件和 Skills,一键提取任何网站的设计规范 Design.md - 少数派 住在三四线城市的你,该开始录播客了 - 少数派 甘南秘境,大白高国 - 少数派 AI的审美:谁让把我变成川内倫子 - 少数派 返工怎能不烦恼,打工人片单总有一部是你的「嘴替」 - 少数派 为了让「上厕所」更健康,我做了一个小工具 - 少数派 AI + Skill,能够让生成的文章去除 AI 味吗? - 少数派 新玩意|韶音OpenDots ONE 耳夹式耳机 - 少数派 《美满》| 在每一个春天的晚上相爱(362) - 少数派 新玩意|优篮子 PS01 MagSnap 磁吸支架 - 少数派 自我整合手记 | 我开始早睡了:用稳定规则,为自由托底 - 少数派 用龙虾(OpenClaw)两个多月,我最深的12个体会 - 少数派 听歌时间到,12 张你可能错过的 2025 华语乐坛好专辑 - 少数派 承诺能追吗 - 少数派 macOS 26启动台没了? 我做了个不一样的App启动器 - Keboard - 少数派 《四海为家的人》| INTJ对话INTJ(361) - 少数派 你发过的那些黑历史,是时候一次清干净了 - 少数派 新玩意:安安静静玩,越玩越专注:计客密码机 - 少数派 iPad 用户首次体验 Android 平板:vivo Pad6 Pro - 少数派 数据逻辑强 - 少数派 极北行+ | 一路向北,探访日本至北之地 | 001 - 少数派 万字剖析:千问App深度体验报告(2026) - 少数派 在2026年,如何真正防止别人抄袭你的作品 - 少数派 怎么用 50 块搭个 AI 语音助手?我踩了 3 天坑 - 少数派 YeeroAI:让 AI 对话真正成为知识管理的一部分 - 少数派 爬泰山 - 少数派 「旅图显影」 App 更新:这次,我们补上了一点「手感」 - 少数派 假期出门太折磨?我的 23 条经验帮你规划惬意旅行 - 少数派 工作流会变吗 - 少数派 Claude Opus 4.6 怎么用最省钱?我测了 5 种方案 - 少数派 GPT Image 2 让图文并茂不再稀罕 - 少数派 用户侧出发——什么是AI,我要不要学习? - 少数派 找片、转存、整理、播放一条龙!让你的付费网盘值回票价 - 少数派 欢迎试用!日课一问2.0插件 - 少数派 自己做的MDeditor,原本想购买 Typora 试了两次支付不成功,干脆自己做一个 - 少数派 vibe coding了一个 3MB 的小工具,让 ~/Downloads 彻底告别混乱 - 少数派 因为受不了 Mac 的风扇策略,我做了一个风扇控制工具 - 少数派 别只怪模型 - 少数派 Warp 终端的 AI 功能怎么用?我测了一周的体验 - 少数派 AI 写代码老是出 bug?这 5 个配置我后悔没早知道 - 少数派 「新玩意」苹果出相机可能就这样:Sigma BF + 45mm F2.8 DG Contemporary - 少数派 一个面向2030年的AI操作系统是什么样子的:浅谈cola这款有灵魂的Agent - 少数派 别只看写代码 - 少数派 每天解决10个问题,还是一口气攻坚解决400个? - 少数派 AI 交易机器人怎么搭?我用 Claude 跑了一周实盘 - 少数派 Maptoposter Online:把你爱的城市画成艺术海报 - 少数派 Function Calling 怎么用?我测了 3 个模型发现差距真大 - 少数派 Legend Talk:我做了个 AI 圆桌,让 160 位思想家围着你的问题转 - 少数派 如何找到自己的蓝方?在小县城寻找压力测试 - 少数派 语音输入与软件接口|2026年聊AI时,我们都聊些什么(上) - 少数派 混动已经卖爆,纯电又来补刀——钛7闪充版简直“不讲武德” - 少数派 本月玩什么|朋友收藏、识质存在、沙罗周期 - 少数派 为什么要每天坚持输出? - 少数派 Claude API 挂了好几个小时,你的项目有备用方案吗? - 少数派 Function Calling 没你想的复杂——我用它做了个有点用的工具 - 少数派 登录系统立即播放视频或者图片音乐的软件 - 少数派 我为什么创建 FlipHTML5 下载工具 - 少数派 残局没电?多品牌外设电量统一管理软件EasyBluetooth已支持RTSS游戏内显示以及AIDA64 - 少数派 前往通义路的路 - 少数派 太好看了,媲美Sun的个人导航页,NAS部署星云门户 - 少数派 乌黑嘴唇“一键检测”上线了 - 少数派 派早报:Claude AI 接入多个创意软件生态、FILCO 生产方接手品牌等 - 少数派 【更新】BearCLI、Claude 连接器与 MCP 服务器 - 少数派 记了上千条流水,还是看不懂财务?我做了一个让 AI 读懂账本的工作台 - 少数派 MINI R56 升级原厂 Sport 模式 - 少数派 新玩意 | 一棵柠檬树(仿真版) - 少数派 Momenta的“物理AI”野望,需迈过“含摩量”这道关 - 少数派 网页直接投屏控制手机!NAS一键部署PandaScrcpy,流畅丝滑可远程。 - 少数派 众测|邀你一同探索随身 AI 硬件入口 YoooClaw C·ONE - 少数派 2050大会:分享时间是真诚 参会记 - 少数派 iPad 赋能电影创作:国内首部宣纸手绘长片《燃比娃》的幕后故事 - 少数派 AI的审美:我用 8 个大模型给 100 张旅行照片打分 - 少数派 普通人如何破圈?去参加一个本地协会 - 少数派 把极空间的图标全换了,主题DIY全攻略打造你的专属NAS桌面 - 少数派 电子便签墙,帮你实现便签自由 - 少数派 我如何用三个 CLI 工具取代文档创建需求 - 少数派 原来真的有人可以玩一辈子 - 少数派 社区速递 139 | 派友热议三月买了啥、复古单反尼康 Df 体验 - 少数派 06 作品的赏析与评价 - 少数派 TDS REVIEW|索尼 WF-1000XM6 降噪真无线耳机体验 - 少数派 35.98万起售的第二代腾势D9,我看重的不是堆料,而是不凑合 - 少数派 鼠须管 Squirrel 皮肤配置指北 - 少数派 从watch ultra2换到redmi watch6 - 少数派 派早报:阿里巴巴发布视频生成模型 HappyHorse 1.0 等 - 少数派 别迷信1M - 少数派 家人们天塌了!网盘“大封杀”,多个渠道多条路,NAS部署PanHub - 少数派 AI与人勾心斗角!NAS一键部署AI狼人杀,假日休闲必备。 - 少数派 电商必备!Comfyui工作流批量生图插件,一次生成12张!支持Nano banana pro模型 - 少数派 Comfyui工作流配置Gpt-image-2模型教程,0.03/张 - 少数派 OpenClaw第三方APi怎么配置?可使用Gpt-image-2模型 - 少数派 会员社区话题精选 Ep. 103 - 少数派
使用 AppleScript、Tags 和 Alfred 重新打造文件管理和搜索系统 - 少数派
2018-04-14 · via 少数派

4.14 更新:
陆陆续续有朋友在评论区反馈说出现异常,看来确实是有朋友希望能直接用上。不过,朋友们,在业务流程还没梳理清楚的情况下,我的代码当然是不能直接使用,不然报错的可能性是很大的。为此,我在 AppleScript 的部分新增加了流程图 ,希望能把我的思路和设计表述清楚,具体代码实现反倒是不重要的。


0. 背景

换了 Macbook 一段时间,积累的文件越来越多,曾经能像闪电一样定位到文件的 Spotlight 开始力不从心。分析之后,发现了以下几个问题导致了:

  • 文件层级太多,检索的时候会蒙蔽,不知道要到哪一层级去找文件。而且层级多了也不利于 Spotlight,不同文件夹下的文件都是叫做需求文档v2.0.pdf
  • 文件版本太多,有时候同一份文档修修改改,根本找不到是哪个版本;也有时候一份文档在编辑的时候是 .graffle,交付的时候导出了 PDF 。这个工作流结束了之后,就产生了一个文件副本。
原来看似整洁但实际上难以检索的文件系统
原来看似整洁但实际上难以检索的文件系统

对个人工作需求进行分析后,得到以下几个解决思路:

文件整理

  • 文件修改时间外露:本质上是版本的管理
  • ‎文件所属文件夹外露:本质上是项目的管理
  • 打散文件夹结构,使用标签系统:本质上是让文件从单维度到多维度分类

文件搜索

  • 允许按照项目层层检索
  • 允许按照文件类型搜索
  • 允许按照关键词搜索
  • 允许按照工作流搜索(例如原型、需求文档、接口文档、设计稿...etc.)

1. 思路

从需求到落实,重新整理下思路,可以归类到三个环节的改造建立:

  1. 标签系统建立:依据文件类型、工作流程打标签,主要是为了有效搜索和检搜打基础
  2. 重命名系统建立:依据所属项目、文档修改时间重命名,关键在于可以让人一目了然地挑选出所需的文档
  3. 搜索系统改造:能比较灵活地搜索,例如针对标签、类型、关键词...

2. 标签系统建立

首先,打散文件夹层级,每个项目只有一个文件夹。粗暴地使用 Hazel 监控文件夹并直接打标签!

使用 Hazel 监控需要打标签的文件夹
使用 Hazel 监控需要打标签的文件夹

围绕 类型workflow,我这边列出的标签规则就是:

  • 类型是 numbers 或 xlsx 的,tag 表格
  • 类型是 PDF 的,tag PDF
  • 类型是 docx 或 pages 的,tag 文档
  • 类型是 keynote 或 rp 或 关键词带有「原型」的,tag 原型
  • 关键词带有「流程」的,tag 流程图
  • 关键词带有「设计稿」的,tag 设计稿
  • 关键词带有「接口」的,tag 接口文档
    Hazel 自带的规则就有打标签这个操作
    Hazel 自带的规则就有打标签这个操作

对,就是这么粗暴。

3. 重命名系统建立

摸索了手边的所有工具一圈,能满足我的工具是:没有。
唯一有可能的,是 AppleScript。而且根据经验,在 Mac 环境里,不同软件之间联动比较多,这种脚本还是使用 Workflow 封装一下,降低整个 workflow 的耦合性,比较好调试和复用。
因为我们的项目是会频繁增加的,也就是说起码「子文件夹」这个元素,是需要自动获取的,不然每个新项目,都要改下 workflow,会崩溃。

总结一下,我们分析一下业务场景:

  1. 必须要有一个不变的根目录,相当于工作的总目录,是程序要去监控的文件夹。这个文件夹以外的项目,不适用。
  2. 项目会不断增加,每个新项目都会存在一个新文件夹中。
  3. 有一些边界场景要处理:
  • 对于已有前缀的文件,很有可能是老文件,不能重复处理
  • 有些文件名,添加了前缀后,变成了一样的名称,在系统中就会引起异常,所以要抛个异常去接。
业务场景分析
业务场景分析

接下来,我们拆解下这个程序要如何设计。先把上述的业务场景转化为业务流程图。

根据业务流程图设计程序
根据业务流程图设计程序

1. 第一步,就使用 Automator 监控总文件夹,每次触发都把文件夹里面的文件列表以数组形式传入下一步。

考虑到维护性,使用 Automator 封装 Applescript
考虑到维护性,使用 Automator 封装 Applescript
  1. 主函数接收到上一步传入来的子文件列表,就开始对里面的每一个子文件夹进行遍历,调用 rename() 函数。
--重命名增加项目前缀,例如【projectName】file_original_name.extension
on run {input, parameters}
set folder_lists to input as list
repeat with i from 1 to number of items in folder_lists
set this_item to item i of folder_lists
rename(this_item)
end repeat
end run
--主要的函数本身,上方为 workflow 执行 applescript 时自带的函数
on rename(input)
tell application "System Events"
--函数里会传入input,把它设为项目文件夹「theFolder」,然后拼接【xx】,作为一个前缀
set theFolder to input as alias
set thePrefix to ("【" & name of theFolder as string) & "】"
end tell
--用于通知用的文案,可要可不要
set query to " "
--接下来要让Finder去执行任务了,把刚刚的项目文件夹里的文件,全部轮询一遍
tell application "Finder"
set all_files to every item of theFolder as list
repeat with i from 1 to number of items in all_files
set this_item to item i of all_files
--如果文件名称本身就带有这个【xx】前缀,那就跳过,大家就当冇事发生过
if thePrefix is not in name of this_item then
--如果文件夹名字内没有带前缀,那就把新名字拼接为「【xx】原名」
set new_name to thePrefix & name of this_item
try
set name of this_item to new_name as string
--做个容错性处理,如果遇到重复命名,就发个通知告诉我已存在就好了
on error the error_message number the error_number
set query_error to new_name & "已存在"
display notification query_error with title "重命名失败"
end try
--重命名成功后,把新名字记录一下,发个通知告诉我一声哪些改好了
set query to query & "
" & new_name
end if
end repeat
end tell
if query is not " " then
if query_error is "" then
display notification query with title thePrefix & "文件夹重命名已完成"
end if
end if
--最后,函数别忘了 return 和 end
return input
end rename

添加修改时间后缀的逻辑也差不多,一样是使用 workflow 封装一下。

--主函数和上述一致
on run {input}
set folder_lists to input as list
repeat with i from 1 to number of items in folder_lists
set this_item to item i of folder_lists
rename(this_item)
end repeat
end run

on rename(input)
tell application "System Events"
set theFolder to input as alias
end tell
set query to " "
set dateMark to "[t-"
tell application "Finder"
set all_files to every item of theFolder as list
end tell
repeat with i from 1 to number of items in all_files
set itemKind to kind of item i in all_files
if (itemKind as string) is not "文件夹" then
set this_item to item i of all_files
set itemName to name of this_item
set itemExtension to "." & (name extension of this_item as text)
set datetime to modification date of this_item
set theDate to mfdateToDate(datetime)
-- 时间后缀这个处理稍微复杂点,因为文件是有可能被多次修改的,因此每次修改完都要替换掉原来的后缀,而不能简单地跳过不处理
if dateMark is in itemName then
set AppleScript's text item delimiters to dateMark
set previousItemName to the first text item of itemName
set previousDate to findAndReplaceInText(itemName, previousItemName & dateMark, "")
set previousDate to findAndReplaceInText(previousDate, "]" & itemExtension, "")
if previousDate is not theDate then
set new_name to previousItemName & dateMark & theDate & "]" & itemExtension
set name of this_item to new_name
set query to query & "
" & new_name
display notification query with title theDate & "文件时间重命名已完成"
end if
end if
-- 如果文件名没有时间后缀,那很有可能是新文件,就直接加上。而且加上的时候,不能直接加在文件名后面,不然会把文件真正的代表格式的后缀名也改掉。
if dateMark is not in itemName then
set pre_itemName to findAndReplaceInText(itemName, itemExtension, "")
set new_name to pre_itemName & dateMark & theDate & "]" & itemExtension
set name of this_item to new_name
set query to query & "
" & new_name
display notification query with title theDate & "文件时间重命名已完成"
end if
end if
end repeat
end rename
-- 定义多了一个函数,用于对当前日期的格式转换
on mfdateToDate(theDate as string)
set AppleScript's text item delimiters to "年"
set theYear to the first text item of theDate
set theMonth to the second text item of theDate
set AppleScript's text item delimiters to "月"
set theDay to the second text item of theMonth
set theMonth to the first text item of theMonth
set AppleScript's text item delimiters to "日"
set theDay to the first text item of theDay
set theYear to findAndReplaceInText(theYear, "20", "")
set theDate to theMonth & "." & theDay as text
return theDate
end mfdateToDate
-> 内置的一个函数,在重命名时调用处理真正后缀名的问题
on findAndReplaceInText(theText, theSearchString, theReplacementString)
set AppleScript's text item delimiters to theSearchString
set theTextItems to every text item of theText
set AppleScript's text item delimiters to theReplacementString
set theText to theTextItems as string
set AppleScript's text item delimiters to ""
return theText
end findAndReplaceInText

配置在 workflow 上,把总工作文件夹作为监控文件夹,再把里面每一个子项目作为变量输出。
因为封装成了一个 workflow,你可以用任何喜欢的方式触发,例如 Hazel、Keyboard Maestro、Alfred、鼠标双击...
这里,我自己依然使用了 Hazel 做监控,监控到文件夹有变动,就调用这个 workflow 即可。

因为封装成了Workflow,所以调用非常灵活
因为封装成了Workflow,所以调用非常灵活

Well,配合标签系统,整个文件系统目前已经还款一新!

  • 文件层级被压扁,一目了然
  • 可以根据文件类型去检索(例如我要找到最新的表格)
  • 也可以根据工作流程(例如我要找到最新的设计稿)来寻找
文件再多,也能保持层级扁平和结构清晰
文件再多,也能保持层级扁平和结构清晰

4. 搜索系统改造

要实现比较复杂的搜索,Spotlight 肯定不能满足了;然后因为有大量中文文档, LauchBar 也指望不上了。
那么,就使用 Alfred 吧。
我观察了一下自己日常检索文件的思路顺序,无非是:

  1. 我在处理的是哪个项目?
  2. 我在找的是什么文件?
    拓展 Alfred 的自带用例,增加了使用标签、种类等方法定位文件
    拓展 Alfred 的自带用例,增加了使用标签、种类等方法定位文件

    精准搜索的使用流程
    精准搜索的使用流程

    最后,使用系统自带的 example 改造一下,捏造出了一个搜索方法:首先选择项目名,然后有四种方法供我选择筛选文件:显示文件列表、关键词、类型、标签。

5. 最后

至此,这一轮的改造完成。重新回顾一下思路:

文件整理

  • 文件修改时间和所属项目外露:使用 Applescript 进行自动命名。
  • 打散文件夹结构,使用标签系统:按照工作流、文件类型、文件关键词等维度自动打标签。

文件搜索

  • 允许按照项目层层检索:在 Finder 内使用标签做排列区分、单向检索
  • 允许按照文件类型搜索:使用 Alfred 精确搜索类型
  • 允许按照关键词搜索:使用 Alfred 搜索关键词
  • 允许按照工作流搜索(例如原型、需求文档、接口文档、设计稿...etc.):使用 Alfred 搜索标签