文件管理是终端里最高频的操作。现代工具让浏览、压缩、监听、阅读都能在终端内完成,但它们的价值不在“替代 Finder”,而在于让文件操作可组合、可批量、可自动化。
1. 文件管理的命令行哲学
在图形界面中管理文件直观但缓慢——每次操作都需要鼠标移动、窗口切换、右键菜单。在终端里,文件管理是可组合、可批量、可自动化的。
传统工具(ls、cp、mv、tar、unzip)解决了基本需求,但存在明显局限:ls 只能列出不能交互,tar 的参数组合令人困惑(-xzf 还是 -xjf?),每次格式变化都要查文档。现代工具的目标不是抛弃经典,而是填补交互和统一性上的空白。
# macOS
brew install yazi ouch watchexec glow
# Ubuntu/Debian
sudo apt install yazi ouch watchexec glow2. yazi — 终端文件管理器
yazi 是一个用 Rust 编写的 TUI 文件管理器,定位类似 Ranger 但更现代。它提供异步 I/O、Vim 键位导航和内置文件预览。
yazi # 在当前目录打开
yazi ~/Downloads # 在指定目录打开核心操作
在 yazi 内部,所有操作都通过键盘完成:
| 按键 | 功能 |
|---|---|
j / k | 下 / 上移动 |
h / l | 返回上级 / 进入目录 |
Space | 选中文件(支持多选) |
y / x | 复制 / 剪切选中 |
p | 粘贴 |
d | 删除(移入系统回收站) |
r | 重命名 |
a | 新建文件或目录(以 / 结尾为目录) |
/ | 搜索文件名 |
. | 显示/隐藏隐藏文件 |
e | 用 $EDITOR 编辑 |
q | 退出 |
预览与 Shell 集成
yazi 内置预览面板:文本文件有语法高亮,图片直接预览(需要终端支持),PDF 显示第一页。
退出 yazi 后默认不会 cd 到浏览的目录。配置 y() 函数解决这个问题:
# 添加到 shell 配置文件(.zshrc / .bashrc)
function y() {
local tmp="$(mktemp -t "yazi-cwd.XXXXXX")"
yazi "$@" --cwd-file="$tmp"
if cwd="$(cat -- "$tmp")" && [ -n "$cwd" ] && [ "$cwd" != "$PWD" ]; then
builtin cd -- "$cwd"
fi
rm -f -- "$tmp"
}之后用 y 代替 yazi,退出时自动 cd 到所在位置。
3. ouch — 万能压缩工具
ouch 提供统一的压缩/解压命令行接口,解决”每种格式命令都不同”的痛点。
# 解压(自动识别格式)
ouch decompress archive.tar.gz
ouch decompress archive.zip
ouch decompress archive.7z
ouch d archive.tar.gz # 简写
# 压缩(根据扩展名自动选择格式)
ouch compress file.txt file.txt.gz
ouch compress src/ output.tar.gz
ouch compress docs/ archive.tar.zst # zstd 压缩
# 查看内容(不解压)
ouch list archive.tar.gz
ouch l archive.zip # 简写对比原生命令
| 格式 | 原生命令 | ouch |
|---|---|---|
.tar.gz | tar -xzf | ouch d |
.zip | unzip | ouch d |
.7z | 7z x | ouch d |
.tar.zst | tar --zstd -xf | ouch d |
一个命令覆盖所有格式,不需要记忆参数组合。zstd(.zst)是目前压缩率和速度平衡最好的算法,适合备份和传输。
4. watchexec — 文件变化监听
watchexec 监听文件变化并自动执行命令,解决”改代码 → 手动运行测试 → 慢”的循环。
# 基本用法
watchexec "cargo test" # 文件变化时跑测试
watchexec -e py "python main.py" # 只监听 .py 文件
watchexec -e js,ts "pnpm test" # 多个扩展名
# 高级用法
watchexec --restart "pnpm dev" # 进程重启(杀掉旧的再启新的)
watchexec -w src/ "make build" # 只监听 src/ 目录
watchexec --ignore "*.log" "cmd" # 忽略某类文件实际场景
- 保存即测试:
watchexec -e py -- pytest - 保存即构建:
watchexec -e rs -- cargo check - 监听多目录:
watchexec -w src -w tests -- npm test - Markdown 预览:
watchexec -e md "glow -p README.md"
很多语言有自己的 watch 工具(cargo watch、nodemon),但 watchexec 更通用——它可以运行任何命令,不限于特定语言生态。
5. glow — 终端 Markdown 渲染
glow 在终端里渲染 Markdown 文件,提供标题层级、代码块高亮、列表格式,而不是 cat 的纯文本输出。
glow README.md # 渲染本地 Markdown
glow docs/ # 渲染目录中所有 md 文件(TUI 列表)
cat README.md | glow - # 从 stdin 渲染
glow -p README.md # 分页模式(类似 less)
glow https://raw.githubusercontent.com/user/repo/main/README.md # 远程 URL与 bat 的分工
bat 和 glow 解决不同问题:bat 用于查看代码文件(语法高亮 + 行号),glow 用于阅读文档文件(Markdown 格式渲染)。两者互补,不是替代关系。
6. 文件管理工作流
这些工具可以组合使用,形成高效的终端文件管理流程:
# 浏览 → 压缩:yazi 找到文件后退出,用 ouch 打包
yazi ~/Downloads
ouch compress selected_files/ backup.tar.zst
# 监听 → 自动测试:tmux 分屏,一边写代码一边自动跑测试
watchexec --restart "pnpm test --watch=false"
# 阅读 → 浏览:glow 看文档,yazi 浏览代码结构
glow README.md
yazi src/工具速查表
| 工具 | 功能 | 替代 | 命令示例 |
|---|---|---|---|
yazi | TUI 文件管理器 | ls + cd + Finder | y |
ouch | 统一压缩/解压 | tar/unzip/7z | ouch d archive.tar.gz |
watchexec | 文件变化监听 | cargo watch/nodemon | watchexec -e py -- pytest |
glow | Markdown 渲染 | cat | glow README.md |
7. 使用原则
文件管理工具很容易从效率工具变成误删工具。默认要把范围、目标和副作用想清楚。
交互浏览和批量操作分开:yazi 适合探索目录和选择文件;真正批量修改、移动、删除时,最好回到明确命令和 dry-run。
压缩解压先看内容:陌生压缩包先 ouch list,再决定解压位置,避免污染当前目录。
监听任务要防循环:watchexec 触发的命令如果又写回被监听目录,可能造成重复触发。
文档阅读和脚本输出分开:glow 适合人读 Markdown;脚本处理 Markdown 时应使用原始文本。
高频组合写进任务入口:watchexec -- just test 这类稳定组合可以沉淀进 justfile,减少临时命令漂移。