📁作为一个重度 Linux 使用者,我是如何管理、检索文件的

文件管理的目的是为了帮助我们更快的索引目标文件。

一次好的搜索应当让时间复杂度应当接近常数的;一次坏的搜索,则是多次随机尝试后才发现目标。

为了达到让我们的搜索称为前者,我们需要在文件组织策略上做一些调整。

TL;DR

特殊文件夹 + 快键键 + 快捷方式 + 模糊搜索 + CLI 文件管理器 + 定期 archive

❓我们所面临的文件管理的问题是什么

其实文件的特性是符合网状结构的,其逻辑如同 书签管理中对于书签(网页)的论证是一样的:一个文件可以从不同角度描述获得不同的分类,因此采用标记的方式好于树状索引的方式。

但其实现代文件管理器已经是一个高度优化的树结构,而人们也已经基于此结构有了很多默认规则,因此,我们需要将 目光着眼于如何利用、扩展这些规则。

使用更多的文件夹

对于我来说,文件的管理其实与书签管理恰恰相反——要尽可能地增加文件夹的数量,来良好地将文件分类管理。

一般的工作目录都会在比较深的层里面 一般笔者的工作目录都会在比较深的文件夹里面

使用特殊文件夹来建立自己的索引习惯

相信不少人都会有 “把所有下载内容放到 Downloads 目录中”,“甚至解压的文件也放在 Downloads” 里面的习惯。

其实这不是个 Bug,这或许是个 Feature。

人的记忆力和注意力是有限的,使用特殊文件夹能够帮助我们让 80% 的操作都能聚焦在这些特殊文件夹之中:

  • 对于不同类别的文件,尽可能使用文件夹将彼此隔离
  • 约定大于配置,可以利用很多默认的文件夹、或者形成自己的配置习惯
    • 比如 ${HOME}/code/<language>/ 存放不同语言的代码
    • 比如 ${HOME}/code/git/mine/ 存放使用 git 的项目
    • 比如 ${HOME}/playground/ 存放可以随时删除的文件(与 /tmp 类似)
    • 比如针对网盘专门建立相应的文件夹
  • 利用好 aliases 方便快速切换

各个语言的实验性代码 ~/code 目录下存放各种实验性的代码

git 代码专门存放 ~/code/git/mine 与 ~/code/git/others 存放各种通过 Git 管理的比较大的项目

playground 想要随手验证一些想法?使用 playground!

快捷方式 & 快键键

快捷方式属于 GUI 用户比较常见的概念。在 Linux 上使用各种有图形界面的文件管理器,你也都能轻易使用快捷方式 以及收藏的方式来建立索引。

不过如果你使用命令行的话,aliases 也能帮你达到同样的效果。 定义 alias 帮助快速 cd 笔者单独将 alias 放到 ~/.aliases.zsh 文件下,其中就有关于快速跳转的一些指令

当然也可以用 alias 直接绑定操作。

模糊搜索

如果你还没有接触过模糊搜索,你可以把他类比成 Windows 下的 Everything:

everything 来自 Everything 官网

fzf 及其生态

在 *nix 下,更多使用的是 CLI 工具,比如 FZF。

FZF

通过配置 fzf 相关的 aliases,你能够不在需要漫长的 cd,而直接获得目标。(当然前提是你要对目标文件的文件名有印象)。

fzf 的诞生几乎建立了模糊搜索的又一个生态,比如 fzf-vim,这些周边工具你可以通过 Github Topics 来进行搜索。

另外,Aloxaf 同学的 fzf-tab 也能使用 fzf 完成更多的补全功能, 你可以参考他的这篇博客使用。

z

z 采用的另一个思路:通过学习你的使用习惯,来通过你的简短的输入预测你的目标路径。

z 本身的性能比较慢,除此之外还有 z.lua 以及 zoxide 可以选择,笔者比较推荐后者(因为是 Rust 项目)。

CLI 文件管理器

除了以上方法外,直接用 CLI 文件管理器也是一个不错的选择。

笔者最早接触的有 ranger 亮点是层进式的文件浏览,以及文件预览功能。

当然随后发现 nnn 能够支持多工作路径以及非常方便的 hotkeys,因此目前主要使用它来进行 CLI 文件管理。

nnn nnn help 界面一览,它能够更快地完成 GUI 文件管理器的所有功能

如果用这些工具配上 Tiling Windows Manager 的话,那又是另一篇文章了。

定期 archive

最后就是一定要定期清理冗余的文件,一般来说从顶层目录直接打成压缩包即可。

并且进行备份,建议放在移动硬盘上,腾出电脑的硬盘空间。

另外就是:一定要舍得下狠手XD。

其他

或许每个人都有自己优化的方向,但是我想有一点经验应该是共通的: 如果发现这是一个痛点,请直面它、解决它,哪怕意味着“强迫”自己学新的东西。