文件管理是终端里最高频的操作。现代工具让浏览、压缩、监听、阅读都能在终端内完成,但它们的价值不在“替代 Finder”,而在于让文件操作可组合、可批量、可自动化。

1. 文件管理的命令行哲学

在图形界面中管理文件直观但缓慢——每次操作都需要鼠标移动、窗口切换、右键菜单。在终端里,文件管理是可组合、可批量、可自动化的。

传统工具(lscpmvtarunzip)解决了基本需求,但存在明显局限:ls 只能列出不能交互,tar 的参数组合令人困惑(-xzf 还是 -xjf?),每次格式变化都要查文档。现代工具的目标不是抛弃经典,而是填补交互和统一性上的空白。

# macOS
brew install yazi ouch watchexec glow
 
# Ubuntu/Debian
sudo apt install yazi ouch watchexec glow

2. 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.gztar -xzfouch d
.zipunzipouch d
.7z7z xouch d
.tar.zsttar --zstd -xfouch 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 watchnodemon),但 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 的分工

batglow 解决不同问题: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/

工具速查表

工具功能替代命令示例
yaziTUI 文件管理器ls + cd + Findery
ouch统一压缩/解压tar/unzip/7zouch d archive.tar.gz
watchexec文件变化监听cargo watch/nodemonwatchexec -e py -- pytest
glowMarkdown 渲染catglow README.md

7. 使用原则

文件管理工具很容易从效率工具变成误删工具。默认要把范围、目标和副作用想清楚。

交互浏览和批量操作分开:yazi 适合探索目录和选择文件;真正批量修改、移动、删除时,最好回到明确命令和 dry-run。

压缩解压先看内容:陌生压缩包先 ouch list,再决定解压位置,避免污染当前目录。

监听任务要防循环:watchexec 触发的命令如果又写回被监听目录,可能造成重复触发。

文档阅读和脚本输出分开:glow 适合人读 Markdown;脚本处理 Markdown 时应使用原始文本。

高频组合写进任务入口watchexec -- just test 这类稳定组合可以沉淀进 justfile,减少临时命令漂移。

延伸阅读