跳到主要内容

Mac 终端命令行工具调研报告

调研概述

本文档系统性地整理了 macOS 平台上的终端命令行工具,涵盖终端模拟器、Shell 配置、系统工具增强、生产力工具等方面。这些工具能够显著提升 Mac 终端的使用体验和工作效率。

核心价值

  • 打造高效美观的终端环境
  • 提升命令行操作效率
  • 充分利用 macOS 系统特性
  • 优化日常开发工作流

关联文档


📖 快速导航

按类型分类

  1. 终端模拟器 - 替代系统自带 Terminal

    • iTerm2、Warp、Alacritty、Kitty
  2. Shell 与提示符 - 现代化 Shell 体验

    • Fish、Starship、Oh My Posh
  3. Mac 特有工具 - 利用 macOS 特性

    • pbcopy/pbpaste、open、mdfind、osascript
  4. 文件管理工具 - 高效文件操作

    • ranger、nnn、lf、broot
  5. 系统监控工具 - 实时系统信息

    • btop、glances、neofetch
  6. 网络工具 - 网络诊断与测试

    • httpie、curlie、bandwhich
  7. 生产力工具 - 提升效率

    • fzf、autojump、tldr、cheat
  8. 终端美化 - 颜值优化

    • 字体、配色方案、主题
  9. 脚本自动化工具 - 批量生产利器

    • Shell脚本框架、任务调度、批量处理、脚本生成器
  10. 小众与特定领域工具 - 专业利器

    • 音视频处理、网络分析、数据处理、容器工具、密码管理

按使用场景选择

  • 终端模拟器 → iTerm2(功能全)/ Warp(现代化)
  • Shell → Zsh + Starship / Fish
  • 文件浏览 → ranger(强大)/ nnn(轻量)
  • 系统监控 → btop / glances
  • 模糊搜索 → fzf
  • 快速跳转 → z / autojump
  • HTTP 测试 → httpie
  • 脚本框架 → argc(快速)/ Bashly(专业)
  • 批量处理 → GNU Parallel
  • 任务调度 → launchd

一、终端模拟器

1. iTerm2 ⭐⭐⭐⭐⭐

核心特点

  • Mac 最流行的终端

    • 功能最完善
    • 社区最活跃
    • 插件生态丰富
  • 分屏与窗口管理

    • 水平/垂直分屏
    • 标签页管理
    • 窗口布局保存
    • Hotkey Window(快捷键呼出)
  • 搜索功能

    • 全文搜索
    • 正则表达式
    • 高亮搜索结果
    • 搜索历史
  • 智能功能

    • 自动补全(⌘;)
    • 时光机回溯
    • 触发器(Triggers)
    • Shell Integration
  • 外观定制

    • 配色方案
    • 透明度调节
    • 背景图片/视频
    • 字体配置

必备配置

快捷键设置

⌘T         新建标签
⌘D 垂直分屏
⌘⇧D 水平分屏
⌘[/] 切换标签
⌘⌥方向键 切换分屏
⌘; 自动补全
⌘⇧H 粘贴历史
⌘F 搜索
⌘⌥B 时光机回溯

Hotkey Window(全局快捷键)

  1. Preferences → Keys → Hotkey
  2. 勾选 "Show/hide all windows with a system-wide hotkey"
  3. 设置快捷键(推荐 ⌥Space)
  4. 配置:
    • Pin hotkey window to all Spaces(所有桌面可用)
    • Animate showing and hiding(动画效果)

Shell Integration(必装)

curl -L https://iterm2.com/shell_integration/install_shell_integration_and_utilities.sh | bash

功能:

  • 命令历史标记(成功/失败)
  • 快速跳转到上一个命令(⌘↑)
  • 选中命令输出(⌘⇧A)
  • 下载文件到本地
  • 显示命令执行时间

配色方案推荐

# 安装配色方案
git clone https://github.com/mbadolato/iTerm2-Color-Schemes.git
cd iTerm2-Color-Schemes/schemes

# 常用方案:
- Dracula
- Solarized Dark
- Gruvbox Dark
- One Dark
- Nord
- Tokyo Night

导入方式:

  1. Preferences → Profiles → Colors
  2. Color Presets → Import
  3. 选择 .itermcolors 文件

字体配置

# 推荐字体(支持 Powerline 图标)
brew install --cask font-fira-code-nerd-font
brew install --cask font-jetbrains-mono-nerd-font
brew install --cask font-meslo-lg-nerd-font

# iTerm2 设置
# Preferences → Profiles → Text
# Font: MesloLGS NF (Powerlevel10k 推荐)
# Size: 13pt
# 勾选: Use ligatures (连字)

高级功能

触发器(Triggers): 自动化响应特定输出

Preferences → Profiles → Advanced → Triggers

示例:
1. 高亮错误
正则: .*error.*
动作: Highlight Text (红色)

2. 通知
正则: .*BUILD SUCCESS.*
动作: Post Notification

3. 自动运行命令
正则: .*Test failed.*
动作: Run Command (./notify.sh)

Badges(徽章): 显示动态信息

Preferences → Profiles → General → Badge

示例:
\(session.name) # 会话名
\(user)@\(session.hostname) # 用户@主机
\(session.path) # 当前路径

Profiles(配置文件): 不同场景使用不同配置

创建多个 Profile:
- Local Development (本地开发)
- Production SSH (生产服务器 - 红色背景警示)
- Docker (Docker 容器)

快捷切换:⌘O → 选择 Profile

Python API

#!/usr/bin/env python3
import iterm2

async def main(connection):
app = await iterm2.async_get_app(connection)
window = app.current_terminal_window

if window:
await window.async_create_tab()
session = window.current_tab.current_session
await session.async_send_text('ls -la\n')

iterm2.run_until_complete(main)

实用技巧

技巧 1: 快速 SSH 连接

Preferences → Profiles → General → Command
选择: Command
输入: ssh user@example.com

保存为 Profile,一键连接

技巧 2: 自动日志记录

Preferences → Profiles → Session
勾选: Automatically log session input to files
设置路径: ~/Logs/iterm/\(session.name)-\(timestamp).log

技巧 3: 密码管理器集成

Preferences → Profiles → Advanced → Triggers
正则: Password:
动作: Open Password Manager

技巧 4: 快速搜索并执行

1. ⌘F 搜索历史命令
2. ⌘E 将搜索结果发送到输入
3. Enter 执行

技巧 5: 智能选择

双击选择:单词
三击选择:行
⌘点击:URL 自动打开
⌥⌘点击:文件路径(在编辑器打开)

优势与劣势

优势

  • 功能最完善,几乎无所不能
  • 社区活跃,资源丰富
  • 高度可定制
  • Shell Integration 强大
  • 免费开源
  • Mac 原生体验

劣势

  • 界面相对传统
  • 配置复杂(功能太多)
  • 启动速度不如现代终端
  • GPU 加速支持有限

评分

  • 功能完整性: ⭐⭐⭐⭐⭐ (5/5)
  • 可定制性: ⭐⭐⭐⭐⭐ (5/5)
  • 易用性: ⭐⭐⭐⭐ (4/5)
  • 性能: ⭐⭐⭐ (3/5)
  • 社区资源: ⭐⭐⭐⭐⭐ (5/5)

2. Warp ⭐⭐⭐⭐⭐

  • 官网: https://www.warp.dev/
  • 平台支持: macOS、Linux(Beta)
  • 开源协议: 免费(闭源)+ 付费团队版

核心特点

  • 21世纪的终端

    • 使用 Rust 编写
    • GPU 加速渲染
    • 现代化 UI
  • 革命性功能

    • 命令编辑器(类似 IDE)
    • 块状输出(Block)
    • AI 命令建议
    • 命令搜索
    • 协作功能
  • AI 集成

    • AI 命令解释
    • 自然语言转命令
    • 错误修复建议
    • 命令优化
  • 协作功能

    • 共享会话
    • 团队知识库
    • Workflows 共享

核心功能详解

1. 命令编辑器

特性:
- 多行编辑(类似 IDE)
- 语法高亮
- 历史记录(⌘↑)
- 自动补全
- 括号匹配

2. Blocks(块)

每个命令及其输出是一个独立的块:
- 可折叠
- 可共享
- 可搜索
- 带时间戳
- 显示执行时间

3. AI 功能(Warp AI)

# 询问 AI
按 #,输入自然语言

示例:
"list all running docker containers"
→ AI 建议: docker ps

"find files larger than 100MB"
→ AI 建议: find . -type f -size +100M

"fix permission denied error"
→ AI 分析错误并给出解决方案

4. Workflows(工作流)

保存常用命令序列

示例:
名称: Deploy to Production
步骤:
1. git pull origin main
2. npm run build
3. docker build -t myapp .
4. kubectl apply -f k8s/

执行: ⌘P → 搜索 "Deploy" → Enter

5. 命令搜索

⌘P: 命令面板
- 搜索历史命令
- 搜索 Workflows
- 搜索 AI 建议
- 搜索文件

⌘K: 全局搜索
- 跨会话搜索
- 搜索输出内容

快捷键

⌘T         新建标签
⌘D 垂直分屏
⌘⇧D 水平分屏
⌘K 清屏
⌘P 命令面板
⌘R 搜索历史
⌘L 跳转到行
⌘⇧C 复制块输出
⌘⇧E 编辑命令
⌘/ 打开 AI

# Block 操作
⌘⇧↑/↓ 选择块
⌘⇧S 共享块
⌘⇧F 收藏块

实用场景

场景 1: AI 辅助调试

$ npm install 失败

1. 选中错误信息
2. 右键 → "Ask Warp AI"
3. AI 分析错误并给出解决方案
4. 一键应用建议的命令

场景 2: 团队协作

1. 运行复杂的调试命令
2. 右键命令块 → Share
3. 生成链接发给同事
4. 同事点击链接查看完整上下文

场景 3: 自定义 Workflows

创建 "Database Backup":
1. ⌘P → Create Workflow
2. 输入命令序列
3. 设置参数占位符
4. 保存

使用:
⌘P → "Database Backup" → 输入参数 → 执行

优势与劣势

优势

  • 最现代化的终端
  • GPU 加速,性能优秀
  • AI 功能强大
  • UI/UX 一流
  • 命令编辑器革命性
  • 块状输出便于管理
  • 协作功能独特

劣势

  • 闭源软件
  • 某些高级功能需付费
  • 学习曲线(新概念)
  • 资源占用相对较大
  • 可定制性不如 iTerm2

定价

  • 免费版: 个人使用,AI 功能有限
  • 团队版: $15/用户/月(无限 AI、团队协作)

评分

  • 现代化: ⭐⭐⭐⭐⭐ (5/5)
  • 性能: ⭐⭐⭐⭐⭐ (5/5)
  • AI 功能: ⭐⭐⭐⭐⭐ (5/5)
  • 易用性: ⭐⭐⭐⭐⭐ (5/5)
  • 可定制性: ⭐⭐⭐ (3/5)

3. Alacritty ⭐⭐⭐⭐⭐

核心特点

  • 最快的终端模拟器

    • GPU 加速
    • 极致性能优化
    • 低延迟
  • 极简主义

    • 无标签页(依赖终端复用器)
    • 无菜单栏
    • 纯 YAML 配置
  • 跨平台

    • 统一体验
    • 配置可移植

配置示例(~/.config/alacritty/alacritty.yml)

# 窗口设置
window:
opacity: 0.95
padding:
x: 10
y: 10
decorations: buttonless # 无标题栏

# 字体
font:
normal:
family: MesloLGS NF
style: Regular
size: 13.0

# 配色
colors:
primary:
background: '#1e1e2e'
foreground: '#cdd6f4'

# 快捷键
key_bindings:
- { key: N, mods: Command, action: SpawnNewInstance }
- { key: Q, mods: Command, action: Quit }

配合 tmux 使用

# 启动时自动进入 tmux
# ~/.zshrc
if command -v tmux &\> /dev/null && [ -z "$TMUX" ]; then
tmux attach -t default || tmux new -s default
fi

优势与劣势

优势

  • 性能极致(最快)
  • GPU 加速
  • 资源占用低
  • 跨平台
  • 完全开源
  • 配置简洁

劣势

  • 功能极简(需配合 tmux)
  • 无标签页
  • 无滚动条
  • 学习曲线(配置文件)

评分

  • 性能: ⭐⭐⭐⭐⭐ (5/5)
  • 资源占用: ⭐⭐⭐⭐⭐ (5/5)
  • 跨平台: ⭐⭐⭐⭐⭐ (5/5)
  • 功能: ⭐⭐ (2/5)
  • 易用性: ⭐⭐⭐ (3/5)

4. Kitty ⭐⭐⭐⭐⭐

核心特点

  • GPU 加速终端

    • OpenGL 渲染
    • 图片显示支持
    • 真彩色支持
  • 功能丰富

    • 标签页和窗口
    • 布局管理
    • 键盘协议扩展
    • 远程控制
  • 独特功能

    • 终端内显示图片
    • Kittens(扩展脚本)
    • Unicode 支持完善

配置示例(~/.config/kitty/kitty.conf)

# 字体
font_family JetBrains Mono
font_size 13.0

# 主题
include ~/.config/kitty/theme.conf

# 背景透明
background_opacity 0.95

# 标签页
tab_bar_style powerline
tab_powerline_style slanted

# 快捷键
map cmd+t new_tab
map cmd+w close_tab
map cmd+n new_os_window

# 图片显示
map cmd+i kitten icat /path/to/image.png

Kittens(扩展功能)

# 显示图片
kitty +kitten icat image.png

# Unicode 输入
kitty +kitten unicode_input

# 主题选择器
kitty +kitten themes

# Diff 工具
kitty +kitten diff file1 file2

# SSH 集成(保留本地配置)
kitty +kitten ssh user@host

优势与劣势

优势

  • GPU 加速,性能好
  • 功能丰富(比 Alacritty 多)
  • 图片显示独特
  • Kittens 扩展强大
  • 完全开源

劣势

  • 配置复杂
  • 某些功能不如 iTerm2
  • 社区不如 iTerm2 大

评分

  • 性能: ⭐⭐⭐⭐⭐ (5/5)
  • 功能: ⭐⭐⭐⭐ (4/5)
  • 独特性: ⭐⭐⭐⭐⭐ (5/5)
  • 易用性: ⭐⭐⭐ (3/5)

终端模拟器对比

终端性能功能易用性现代化推荐场景
iTerm2⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐全能、传统用户
Warp⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐现代化、AI
Alacritty⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐极致性能
Kitty⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐图片显示

选择建议

  • 新手 → Warp(现代化、易用)
  • 老手 → iTerm2(功能全、自由度高)
  • 性能党 → Alacritty + tmux
  • 极客 → Kitty(独特功能)

二、Shell 与提示符

注意:Zsh + Oh My Zsh 已在 开发者效能工具 中详细介绍,这里补充其他选择。

1. Fish Shell ⭐⭐⭐⭐⭐

核心特点

  • 开箱即用

    • 无需配置即可使用
    • 自动建议(根据历史)
    • 语法高亮
    • Tab 补全强大
  • 用户友好

    • 配置 Web UI
    • 脚本语法简单
    • 错误提示清晰
  • 强大功能

    • 智能搜索
    • 命令替换建议
    • 函数自动补全

快速开始

# 安装
brew install fish

# 设为默认 Shell
echo /opt/homebrew/bin/fish | sudo tee -a /etc/shells
chsh -s /opt/homebrew/bin/fish

# 配置(Web UI)
fish_config

# 配置文件
~/.config/fish/config.fish

配置示例(config.fish)

# 别名
alias ll "eza -lah --icons"
alias vim "nvim"

# 环境变量
set -gx EDITOR nvim
set -gx GOPATH $HOME/go

# PATH
fish_add_path /opt/homebrew/bin
fish_add_path $HOME/.local/bin

# 提示符(使用 Starship)
starship init fish | source

# 插件管理器 Fisher
if not functions -q fisher
curl -sL https://raw.githubusercontent.com/jorgebucaran/fisher/main/functions/fisher.fish | source && fisher install jorgebucaran/fisher
end

# 插件
fisher install jorgebucaran/nvm.fish
fisher install PatrickF1/fzf.fish
fisher install jethrokuan/z

常用插件(Fisher)

# 安装 Fisher
curl -sL https://raw.githubusercontent.com/jorgebucaran/fisher/main/functions/fisher.fish | source && fisher install jorgebucaran/fisher

# 插件推荐
fisher install jorgebucaran/nvm.fish # Node 版本管理
fisher install PatrickF1/fzf.fish # fzf 集成
fisher install jethrokuan/z # 目录跳转
fisher install franciscolourenco/done # 命令完成通知
fisher install oh-my-fish/theme-bobthefish # 主题

Fish 脚本示例

# 函数定义
function mkcd
mkdir -p $argv
cd $argv
end

# 条件判断
if test -f ~/.secret
source ~/.secret
end

# 循环
for file in *.txt
echo "Processing $file"
end

# 命令替换
set files (ls)

优势与劣势

优势

  • 开箱即用,无需配置
  • 自动建议准确
  • 语法高亮美观
  • Web 配置界面
  • 用户体验极好
  • 脚本语法清晰

劣势

  • 不兼容 Bash/Zsh 脚本
  • 某些工具不支持 Fish
  • 插件生态不如 Zsh
  • 学习新语法成本

评分

  • 易用性: ⭐⭐⭐⭐⭐ (5/5)
  • 开箱即用: ⭐⭐⭐⭐⭐ (5/5)
  • 用户体验: ⭐⭐⭐⭐⭐ (5/5)
  • 兼容性: ⭐⭐ (2/5)
  • 插件生态: ⭐⭐⭐ (3/5)

2. Starship ⭐⭐⭐⭐⭐

核心特点

  • 跨 Shell 提示符

    • 支持 Bash、Zsh、Fish、PowerShell 等
    • 统一配置
    • 快速(Rust 编写)
  • 智能显示

    • 自动检测环境(Git、Node、Python 等)
    • 只显示相关信息
    • 可定制
  • 美观

    • Nerd Fonts 图标支持
    • 配色丰富
    • 预设主题

安装与配置

# 安装
brew install starship

# Zsh 集成(~/.zshrc)
eval "$(starship init zsh)"

# Fish 集成(~/.config/fish/config.fish)
starship init fish | source

# Bash 集成(~/.bashrc)
eval "$(starship init bash)"

配置文件(~/.config/starship.toml)

基础配置

# 格式
format = """
[┌───────────────────\>](bold green)
[│](bold green)$directory$git_branch$git_status
[└─\>](bold green) """

# 目录
[directory]
style = "blue bold"
truncation_length = 3
truncate_to_repo = true

# Git 分支
[git_branch]
symbol = " "
style = "bold purple"

# Git 状态
[git_status]
style = "red bold"

完整示例

# 在文件开头显示的内容
format = """
$username\
$hostname\
$directory\
$git_branch\
$git_state\
$git_status\
$nodejs\
$python\
$rust\
$golang\
$docker_context\
$time\
$line_break\
$character"""

# 右侧提示
right_format = """$cmd_duration"""

# 目录
[directory]
truncation_length = 3
truncate_to_repo = true
format = "[$path]($style)[$read_only]($read_only_style) "
style = "cyan bold"

# Git 分支
[git_branch]
format = "on [$symbol$branch]($style) "
symbol = " "
style = "bold purple"

# Git 状态
[git_status]
format = '([\[$all_status$ahead_behind\]]($style) )'
style = "bold red"

# Node.js
[nodejs]
format = "via [$symbol($version )]($style)"
symbol = " "
style = "bold green"

# Python
[python]
format = 'via [${symbol}${pyenv_prefix}(${version} )(\($virtualenv\) )]($style)'
symbol = " "
style = "bold yellow"

# Rust
[rust]
format = "via [$symbol($version )]($style)"
symbol = " "
style = "bold red"

# Go
[golang]
format = "via [$symbol($version )]($style)"
symbol = " "
style = "bold cyan"

# Docker
[docker_context]
format = "via [$symbol$context]($style) "
symbol = " "
style = "bold blue"

# 执行时间
[cmd_duration]
min_time = 500
format = "took [$duration]($style) "
style = "bold yellow"

# 时间
[time]
disabled = false
format = '🕙[\[ $time \]]($style) '
time_format = "%T"
style = "bold white"

# 字符
[character]
success_symbol = "[➜](bold green)"
error_symbol = "[✗](bold red)"

预设主题

# 查看所有预设
starship preset -l

# 使用预设(写入配置)
starship preset nerd-font-symbols -o ~/.config/starship.toml

# 常用预设:
nerd-font-symbols # Nerd Font 图标
bracketed-segments # 括号分隔
pure-preset # 极简风格
pastel-powerline # Powerline 风格

优势与劣势

优势

  • 跨 Shell 支持
  • 性能极快(Rust)
  • 配置简单(TOML)
  • 智能上下文感知
  • 预设主题丰富
  • 完全开源

劣势

  • 需要 Nerd Font
  • 配置较 Powerlevel10k 简单(功能少)

评分

  • 性能: ⭐⭐⭐⭐⭐ (5/5)
  • 跨平台: ⭐⭐⭐⭐⭐ (5/5)
  • 易用性: ⭐⭐⭐⭐⭐ (5/5)
  • 可定制性: ⭐⭐⭐⭐ (4/5)

3. Oh My Posh ⭐⭐⭐⭐

核心特点

  • 跨平台提示符

    • Windows、macOS、Linux
    • 跨 Shell(Bash、Zsh、Fish、PowerShell)
    • 统一体验
  • 主题丰富

    • 200+ 内置主题
    • JSON 配置
    • 易于自定义

快速开始

# 安装
brew install jandedobbeleer/oh-my-posh/oh-my-posh

# Zsh 集成
eval "$(oh-my-posh init zsh)"

# 使用主题
eval "$(oh-my-posh init zsh --config $(brew --prefix oh-my-posh)/themes/atomic.omp.json)"

优势与劣势

优势

  • 主题丰富(200+)
  • 跨平台最好
  • Windows 支持优秀

劣势

  • 性能不如 Starship
  • 配置 JSON 格式(不如 TOML 直观)

评分

  • 主题数量: ⭐⭐⭐⭐⭐ (5/5)
  • 跨平台: ⭐⭐⭐⭐⭐ (5/5)
  • 性能: ⭐⭐⭐ (3/5)

三、Mac 特有命令行工具

1. 剪贴板工具

# pbcopy - 复制到剪贴板
echo "Hello" | pbcopy
cat file.txt | pbcopy
pwd | pbcopy

# pbpaste - 从剪贴板粘贴
pbpaste
pbpaste \> file.txt
pbpaste | grep "pattern"

# 实用组合
# 复制当前路径
pwd | pbcopy

# 复制文件内容
cat ~/.ssh/id_rsa.pub | pbcopy

# 复制命令输出
ls -la | pbcopy

# 复制 Git 远程 URL
git remote get-url origin | pbcopy

2. open - 打开文件/应用/URL

# 打开文件(使用默认应用)
open file.pdf
open image.png
open document.docx

# 打开目录
open . # 当前目录(Finder)
open ~/Documents
open /Applications

# 打开 URL
open https://google.com

# 指定应用打开
open -a "Visual Studio Code" file.txt
open -a Safari https://google.com
open -a Preview image.png

# 编辑文件(TextEdit)
open -e file.txt

# 用 Finder 显示文件
open -R /path/to/file

# 打开多个文件
open file1.txt file2.txt

# 创建别名
alias chrome="open -a 'Google Chrome'"
alias code="open -a 'Visual Studio Code'"

3. mdfind - Spotlight 搜索

# 搜索文件
mdfind "filename"
mdfind -name "document.pdf"

# 搜索内容
mdfind "search term"

# 指定目录搜索
mdfind -onlyin ~/Documents "keyword"

# 按类型搜索
mdfind "kind:image"
mdfind "kind:pdf"
mdfind "kind:folder"

# 日期过滤
mdfind "kMDItemFSCreationDate \>= $date(2024-01-01)"

# 组合查询
mdfind "kind:image AND kMDItemPixelWidth \>= 1920"

# 实用示例
# 查找大文件
mdfind "kMDItemFSSize \>= 100000000" # \> 100MB

# 查找最近修改的文件
mdfind "kMDItemFSContentChangeDate \>= $time.now(-86400)" # 最近1天

# 查找特定扩展名
mdfind -name "*.js" -onlyin ~/Projects

4. osascript - 执行 AppleScript

# 显示通知
osascript -e 'display notification "Build Complete" with title "Success"'

# 显示对话框
osascript -e 'display dialog "Continue?" buttons {"No", "Yes"} default button "Yes"'

# 获取对话框输入
result=$(osascript -e 'text returned of (display dialog "Enter name:" default answer "")')

# 控制应用
osascript -e 'tell application "Safari" to activate'
osascript -e 'tell application "Music" to play'

# 设置音量
osascript -e "set volume output volume 50"

# 获取系统信息
osascript -e "system info"

# 实用脚本
# 构建完成通知
npm run build && osascript -e 'display notification "Build Complete" with title "npm"'

# 长时间任务完成语音通知
long_task && osascript -e 'say "Task completed"'

# 定时提醒
sleep 3600 && osascript -e 'display notification "1 hour passed" with title "Timer"'

5. say - 文本转语音

# 基本使用
say "Hello World"

# 指定语音
say -v Alex "Hello"
say -v Samantha "Hello"

# 列出所有语音
say -v ?

# 中文语音
say -v Ting-Ting "你好"

# 保存为音频文件
say -o output.aiff "Hello World"

# 从文件读取
say -f file.txt

# 实用示例
# 命令完成提醒
long_command && say "Command finished"

# 定时提醒
sleep 300 && say "5 minutes passed"

# 读出剪贴板内容
pbpaste | say

6. caffeinate - 防止休眠

# 防止系统休眠
caffeinate

# 防止休眠(指定时间)
caffeinate -t 3600 # 1小时

# 运行命令期间防止休眠
caffeinate -i make

# 防止显示器休眠
caffeinate -d

# 实用示例
# 下载时防止休眠
caffeinate -i wget large-file.zip

# 构建时防止休眠
caffeinate -i npm run build

# 长时间脚本
caffeinate -i ./long-running-script.sh

7. networkQuality - 网速测试

# 网速测试(macOS 12+)
networkQuality

# 详细输出
networkQuality -v

# 输出 JSON
networkQuality -c

8. textutil - 文档转换

# Word → PDF
textutil -convert pdf document.doc

# HTML → RTF
textutil -convert rtf document.html

# 批量转换
textutil -convert pdf *.doc

# 支持格式
# txt, html, rtf, rtfd, doc, docx, wordml, odt, webarchive

9. screencapture - 截图

# 截取整个屏幕
screencapture screen.png

# 截取窗口(交互选择)
screencapture -w window.png

# 截取区域(交互选择)
screencapture -i region.png

# 截图到剪贴板
screencapture -c

# 延迟截图(5秒)
screencapture -T 5 screenshot.png

# 静音(无快门声)
screencapture -x screenshot.png

# 实用示例
# 截图并打开
screencapture -i temp.png && open temp.png

# 定时截图
screencapture -T 10 -x screenshot.png

10. pmset - 电源管理

# 查看电源设置
pmset -g

# 查看电池信息
pmset -g batt

# 查看断言(阻止休眠的进程)
pmset -g assertions

# 设置显示器休眠时间
sudo pmset displaysleep 10 # 10分钟

# 设置系统休眠时间
sudo pmset sleep 30 # 30分钟

# 禁用休眠
sudo pmset -a disablesleep 1

# 查看休眠模式
pmset -g | grep hibernatemode

四、文件管理工具

1. ranger ⭐⭐⭐⭐⭐

核心特点

  • VI 式文件管理器
    • VI 快捷键
    • 三栏预览
    • 文件预览

快速开始

# 安装
brew install ranger

# 运行
ranger

# 基础快捷键
h/j/k/l 左/下/上/右
gg/G 顶部/底部
/ 搜索
: 命令模式
q 退出

2. nnn ⭐⭐⭐⭐⭐

核心特点

  • 极速文件管理器
    • C 语言编写,速度极快
    • 资源占用极低
    • 插件丰富
# 安装
brew install nnn

# 运行
nnn

# 快捷键
↑/↓ 上/下
→ 进入目录
← 返回
Space 选择文件
. 切换隐藏文件
! 执行命令

3. lf ⭐⭐⭐⭐

特点:ranger 的 Go 实现,更快


4. broot ⭐⭐⭐⭐⭐

特点

  • 模糊搜索目录
  • 树状显示
  • 快速导航
brew install broot

# 运行
br

# 使用
输入关键词 → 模糊匹配 → 选择 → cd

五、系统监控工具

1. btop ⭐⭐⭐⭐⭐

详细介绍见 开发者效能工具


2. glances ⭐⭐⭐⭐⭐

特点

  • 跨平台
  • Web UI
  • API 接口
  • 插件系统
brew install glances

# 运行
glances

# Web 模式
glances -w
# 访问 http://localhost:61208

3. neofetch ⭐⭐⭐⭐⭐

特点:显示系统信息 + ASCII Logo

brew install neofetch

neofetch

六、网络工具

1. httpie ⭐⭐⭐⭐⭐

特点:人类友好的 HTTP 客户端

brew install httpie

# GET 请求
http https://api.github.com/users/octocat

# POST JSON
http POST https://httpbin.org/post name=John age:=30

# 下载文件
http --download https://example.com/file.zip

# 表单提交
http -f POST https://httpbin.org/post name=John

2. curlie ⭐⭐⭐⭐

特点:curl 的 httpie 包装

brew install curlie

curlie https://api.github.com/users/octocat

3. bandwhich ⭐⭐⭐⭐⭐

特点:网络带宽监控

brew install bandwhich

sudo bandwhich

七、生产力工具

1. fzf ⭐⭐⭐⭐⭐

模糊搜索神器

brew install fzf

# 安装 Shell 集成
$(brew --prefix)/opt/fzf/install

# 快捷键
Ctrl+R 搜索历史命令
Ctrl+T 搜索文件
Alt+C 搜索目录

# 命令行使用
vim $(fzf) # 模糊搜索文件并用 vim 打开
cd $(find . -type d | fzf) # 模糊搜索目录并 cd
kill -9 $(ps aux | fzf | awk '{print $2}') # 模糊搜索进程并 kill

2. z / autojump ⭐⭐⭐⭐⭐

快速目录跳转

# z(内置于 oh-my-zsh)
z project # 跳转到最常访问的包含 "project" 的目录

# autojump
brew install autojump
j project

3. tldr ⭐⭐⭐⭐⭐

简化的命令示例

brew install tldr

tldr tar
tldr docker
tldr git-commit

4. cheat ⭐⭐⭐⭐

命令速查表

brew install cheat

cheat tar
cheat ssh

八、终端美化工具

1. Nerd Fonts

必装字体(支持图标)

# 推荐字体
brew install --cask font-jetbrains-mono-nerd-font
brew install --cask font-fira-code-nerd-font
brew install --cask font-meslo-lg-nerd-font
brew install --cask font-hack-nerd-font

# Powerlevel10k 推荐
brew install --cask font-meslo-lg-nerd-font

2. 配色方案

iTerm2 配色


九、脚本自动化工具

概述

本章节专注于帮助快速创建、管理和批量生产Shell脚本的工具,涵盖脚本框架、自动化调度、批量处理和脚本生成器等方面。


1. Shell脚本框架

1.1 Bashly ⭐⭐⭐⭐⭐

核心特点

  • YAML配置生成Bash脚本
  • 自动参数解析
  • 自动补全生成
  • 帮助文档生成
  • 环境验证

安装

gem install bashly
# 或
brew install bashly

快速开始

# 创建项目
bashly init

# 生成示例配置
bashly add validations
bashly add config

配置文件示例(bashly.yml)

name: deploy
help: 部署工具
version: 1.0.0

environment_variables:
- name: api_key
help: API密钥
required: true

flags:
- long: --env
short: -e
arg: environment
help: 部署环境
allowed: [dev, staging, production]
default: dev

- long: --force
short: -f
help: 强制部署

- long: --dry-run
help: 模拟运行

commands:
- name: app
help: 部署应用

- name: database
alias: db
help: 数据库操作

commands:
- name: migrate
help: 运行数据库迁移

- name: backup
help: 备份数据库
flags:
- long: --output
short: -o
arg: path
help: 备份文件路径
required: true

examples:
- deploy app --env production
- deploy db migrate
- deploy db backup -o backup.sql

生成脚本

# 生成脚本
bashly generate

# 生成完整版(包含验证函数等)
bashly generate --upgrade

生成的脚本用法

./deploy app --env production
./deploy db migrate
./deploy db backup -o /tmp/backup.sql --dry-run

自定义函数(src/)

# src/app_command.sh
app_command() {
echo "部署应用到 ${args[--env]}"

if [[ ${args[--force]} ]]; then
echo "强制部署模式"
fi

if [[ ${args[--dry-run]} ]]; then
echo "模拟运行,不实际部署"
return
fi

# 实际部署逻辑
git pull origin main
npm run build
pm2 restart all
}

优势: ✅ YAML配置简单直观 ✅ 自动生成专业脚本 ✅ 参数验证和错误处理 ✅ 自动补全支持 ✅ 文档自动生成

劣势: ❌ 需要Ruby环境 ❌ 生成的脚本较大


1.2 argc ⭐⭐⭐⭐⭐

核心特点

  • 注释即配置
  • 无需额外文件
  • 自动参数解析
  • 支持子命令
  • Shell补全生成

安装

brew install sigoden/tap/argc

脚本示例

#!/usr/bin/env bash
# @describe 批量图片处理工具
# @version 1.0.0

# @cmd 压缩图片
# @option -q --quality=<num\> 图片质量(1-100) @default(80)
# @option -o --output=<dir\> 输出目录 @required
# @arg input* 输入文件
compress() {
quality="${argc_quality:-80}"
output="${argc_output}"

for img in "${argc_input[@]}"; do
echo "压缩 $img (质量: $quality) -\> $output"
convert "$img" -quality "$quality" "$output/$(basename "$img")"
done
}

# @cmd 调整尺寸
# @option -w --width=<num\> 宽度 @required
# @option -h --height=<num\> 高度
# @arg input* 输入文件
resize() {
width="${argc_width}"
height="${argc_height:-}"

for img in "${argc_input[@]}"; do
if [[ -n "$height" ]]; then
convert "$img" -resize "${width}x${height}!" "resized_$(basename "$img")"
else
convert "$img" -resize "${width}" "resized_$(basename "$img")"
fi
done
}

# @cmd 添加水印
# @option -t --text=<str\> 水印文字 @required
# @option -p --position=<str\> 位置 @choice(center,top,bottom)
# @arg input* 输入文件
watermark() {
text="${argc_text}"
position="${argc_position:-center}"

for img in "${argc_input[@]}"; do
convert "$img" -gravity "$position" \
-pointsize 30 -fill white -annotate +0+0 "$text" \
"watermarked_$(basename "$img")"
done
}

eval "$(argc --argc-eval "$0" "$@")"

使用

chmod +x image-tool.sh

# 查看帮助
./image-tool.sh --help

# 压缩图片
./image-tool.sh compress -o ./output -q 90 *.jpg

# 调整尺寸
./image-tool.sh resize -w 800 -h 600 photo.jpg

# 添加水印
./image-tool.sh watermark -t "Copyright 2025" -p bottom *.png

# 生成Shell补全
argc --argc-completions bash ./image-tool.sh

批量处理示例

#!/usr/bin/env bash
# @describe 批量文件处理

# @cmd 批量重命名
# @option -p --prefix=<str\> 前缀
# @option -s --suffix=<str\> 后缀
# @flag -d --dry-run 仅预览
# @arg files+ 文件列表
rename() {
prefix="${argc_prefix:-}"
suffix="${argc_suffix:-}"
dry_run="${argc_dry_run:-}"

for file in "${argc_files[@]}"; do
dir=$(dirname "$file")
base=$(basename "$file")
name="${base%.*}"
ext="${base##*.}"

new_name="${prefix}${name}${suffix}.${ext}"
new_path="${dir}/${new_name}"

if [[ "$dry_run" == "1" ]]; then
echo "预览: $file -\> $new_path"
else
mv "$file" "$new_path"
echo "重命名: $file -\> $new_path"
fi
done
}

# @cmd 批量删除
# @option -e --extension=<str\> 文件扩展名
# @flag -r --recursive 递归删除
# @flag -f --force 强制删除
# @arg directory 目标目录
delete() {
ext="${argc_extension}"
recursive="${argc_recursive:-}"
force="${argc_force:-}"
dir="${argc_directory}"

if [[ "$recursive" == "1" ]]; then
find_cmd="find $dir -type f -name '*.$ext'"
else
find_cmd="find $dir -maxdepth 1 -type f -name '*.$ext'"
fi

eval "$find_cmd" | while read file; do
if [[ "$force" != "1" ]]; then
read -p "删除 $file? (y/N): " confirm
[[ "$confirm" != "y" ]] && continue
fi
rm "$file"
echo "已删除: $file"
done
}

eval "$(argc --argc-eval "$0" "$@")"

优势: ✅ 无需额外配置文件 ✅ 注释即文档 ✅ Rust编写,速度快 ✅ 学习成本低


1.3 getopts / getopt (内置)

Bash内置参数解析

#!/bin/bash
# 传统的getopts方式

usage() {
cat << EOF
用法: $0 [选项] 文件...

选项:
-h 显示帮助
-v 详细输出
-o FILE 输出文件
-n NUM 处理数量
EOF
exit 1
}

# 默认值
verbose=0
output=""
count=10

# 解析参数
while getopts "hvo:n:" opt; do
case $opt in
h) usage ;;
v) verbose=1 ;;
o) output="$OPTARG" ;;
n) count="$OPTARG" ;;
\?) usage ;;
esac
done

shift $((OPTIND-1))

# 剩余参数
files=("$@")

# 脚本逻辑
if [[ $verbose -eq 1 ]]; then
echo "详细模式启用"
echo "输出文件: ${output:-标准输出}"
echo "处理数量: $count"
echo "输入文件: ${files[*]}"
fi

高级getopt(支持长选项)

#!/bin/bash

# 使用GNU getopt
TEMP=$(getopt -o 'hvo:n:' \
--long 'help,verbose,output:,number:,dry-run' \
-n "$0" -- "$@")

if [ $? -ne 0 ]; then
echo '参数解析失败' \>&2
exit 1
fi

eval set -- "$TEMP"
unset TEMP

# 默认值
verbose=false
output=""
number=0
dry_run=false

# 解析
while true; do
case "$1" in
'-h'|'--help')
echo "帮助信息"
exit 0
;;
'-v'|'--verbose')
verbose=true
shift
;;
'-o'|'--output')
output="$2"
shift 2
;;
'-n'|'--number')
number="$2"
shift 2
;;
'--dry-run')
dry_run=true
shift
;;
'--')
shift
break
;;
*)
echo '内部错误!' \>&2
exit 1
;;
esac
done

# 使用参数
echo "Verbose: $verbose"
echo "Output: $output"
echo "Number: $number"
echo "Dry run: $dry_run"
echo "剩余参数: $@"

2. 任务调度工具

2.1 launchd(macOS原生)⭐⭐⭐⭐⭐

核心特点

  • macOS系统级任务调度
  • 替代cron
  • 支持复杂触发条件
  • 开机自启动

配置文件位置

# 系统级(需要sudo)
/Library/LaunchDaemons/

# 用户级
~/Library/LaunchAgents/

示例配置(com.example.backup.plist)

\<?xml version="1.0" encoding="UTF-8"?\>
\<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd"\>
\<plist version="1.0"\>
<dict\>
<!-- 任务标识 --\>
<key\>Label</key\>
<string\>com.example.backup</string\>

<!-- 执行的程序 --\>
<key\>ProgramArguments</key\>
<array\>
<string\>/usr/local/bin/backup.sh</string\>
<string\>--output</string\>
<string\>/Volumes/Backup</string\>
</array\>

<!-- 定时执行 --\>
<key\>StartCalendarInterval</key\>
<dict\>
<!-- 每天凌晨2点 --\>
<key\>Hour</key\>
<integer\>2</integer\>
<key\>Minute</key\>
<integer\>0</integer\>
</dict\>

<!-- 工作目录 --\>
<key\>WorkingDirectory</key\>
<string\>/Users/username/backups</string\>

<!-- 日志 --\>
<key\>StandardOutPath</key\>
<string\>/tmp/backup.log</string\>
<key\>StandardErrorPath</key\>
<string\>/tmp/backup_error.log</string\>

<!-- 环境变量 --\>
<key\>EnvironmentVariables</key\>
<dict\>
<key\>PATH</key\>
<string\>/usr/local/bin:/usr/bin:/bin</string\>
</dict\>
</dict\>
</plist\>

更多触发条件示例

<!-- 每周一早上9点 --\>
<key\>StartCalendarInterval</key\>
<dict\>
<key\>Weekday</key\>
<integer\>1</integer\>
<key\>Hour</key\>
<integer\>9</integer\>
<key\>Minute</key\>
<integer\>0</integer\>
</dict\>

<!-- 每小时的第30分钟 --\>
<key\>StartCalendarInterval</key\>
<dict\>
<key\>Minute</key\>
<integer\>30</integer\>
</dict\>

\<!-- 每5分钟运行一次(多个时间) --\>
<key\>StartCalendarInterval</key\>
<array\>
<dict\><key\>Minute</key\><integer\>0</integer\></dict\>
<dict\><key\>Minute</key\><integer\>5</integer\></dict\>
<dict\><key\>Minute</key\><integer\>10</integer\></dict\>
<dict\><key\>Minute</key\><integer\>15</integer\></dict\>
<!-- ... --\>
</array\>

<!-- 文件变化触发 --\>
<key\>WatchPaths</key\>
<array\>
<string\>/path/to/watch</string\>
</array\>

<!-- 目录变化触发 --\>
<key\>QueueDirectories</key\>
<array\>
<string\>/path/to/queue</string\>
</array\>

管理命令

# 加载任务
launchctl load ~/Library/LaunchAgents/com.example.backup.plist

# 卸载任务
launchctl unload ~/Library/LaunchAgents/com.example.backup.plist

# 启动任务
launchctl start com.example.backup

# 停止任务
launchctl stop com.example.backup

# 查看任务状态
launchctl list | grep com.example

# 查看任务详情
launchctl print gui/501/com.example.backup

实用脚本模板

#!/bin/bash
# backup.sh - 配合launchd使用的备份脚本

set -e # 遇到错误立即退出

# 日志函数
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $*"
}

log "开始备份..."

# 备份逻辑
SOURCE="/Users/username/Documents"
DEST="${1:-/Volumes/Backup}"
DATE=$(date '+%Y%m%d_%H%M%S')

# 创建备份目录
mkdir -p "$DEST/backup_$DATE"

# 使用rsync备份
rsync -av --progress "$SOURCE/" "$DEST/backup_$DATE/"

# 清理旧备份(保留最近7天)
find "$DEST" -name "backup_*" -type d -mtime +7 -exec rm -rf {} +

log "备份完成"

2.2 cronie ⭐⭐⭐⭐

brew install cronie

# 编辑crontab
crontab -e

# 示例
# 每天凌晨2点备份
0 2 * * * /usr/local/bin/backup.sh

# 每小时清理临时文件
0 * * * * rm -rf /tmp/cache/*

# 每周一早上9点发送报告
0 9 * * 1 /usr/local/bin/send-report.sh

2.3 Task Spooler (ts) ⭐⭐⭐⭐

核心特点

  • 任务队列管理
  • 并行控制
  • 任务依赖
brew install task-spooler

# 添加任务
ts ./long-task.sh
ts sleep 100

# 查看任务
ts -l

# 等待所有任务完成
ts -w

# 并行限制(最多3个并行)
ts -S 3

# 任务依赖
ID=$(ts ./first-task.sh)
ts -D $ID ./second-task.sh # 等first-task完成后执行

3. 批量处理工具

3.1 GNU Parallel ⭐⭐⭐⭐⭐

核心特点

  • 并行执行命令
  • 自动任务分配
  • 支持远程执行
  • 断点续传
brew install parallel

# 基础用法
parallel echo ::: A B C D
# 输出: A B C D (并行)

# 批量处理文件
parallel convert {} -resize 50% small_{} ::: *.jpg

# 批量重命名
ls *.txt | parallel mv {} {.}.md

# 并行下载
cat urls.txt | parallel -j 5 wget {}

# 批量压缩图片
find . -name "*.jpg" | parallel -j 4 \
'convert {} -quality 80 optimized/{/}'

# 批量视频转换
ls *.mov | parallel -j 2 \
'ffmpeg -i {} -c:v libx264 {.}.mp4'

# 批量运行脚本
parallel -j 10 './process.sh {}' ::: user1 user2 user3

# SSH远程批量执行
parallel -S server1,server2,server3 \
'ssh {} "uptime"'

# 进度显示
parallel --progress convert {} thumb_{} ::: *.jpg

# 保持顺序
parallel -k echo ::: 3 1 2 # 输出: 3 1 2

# 从文件读取
parallel -a tasks.txt ./process.sh

# 断点续传
parallel --resume --joblog log.txt command ::: inputs

实用示例

批量图片处理

#!/bin/bash
# batch-image-process.sh

INPUT_DIR="./images"
OUTPUT_DIR="./processed"

mkdir -p "$OUTPUT_DIR"

# 批量压缩
find "$INPUT_DIR" -name "*.jpg" -o -name "*.png" | \
parallel -j 4 --progress \
'convert {} -resize 800x600 -quality 85 '"$OUTPUT_DIR"'/{/}'

echo "处理完成!"

批量代码格式化

#!/bin/bash
# format-all.sh

# 批量格式化JavaScript文件
find ./src -name "*.js" | parallel -j 8 \
'prettier --write {}'

# 批量格式化Python文件
find ./src -name "*.py" | parallel -j 8 \
'black {}'

批量测试

#!/bin/bash
# run-all-tests.sh

# 并行运行所有测试文件
find ./tests -name "test_*.py" | \
parallel -j 4 --tag \
'python {}'

3.2 xargs (内置) ⭐⭐⭐⭐

# 批量删除
find . -name "*.tmp" | xargs rm

# 批量移动
ls *.txt | xargs -I {} mv {} backup/

# 批量处理(限制并行数)
find . -name "*.jpg" | xargs -P 4 -I {} convert {} -resize 50% {}

# 交互确认
find . -name "*.log" | xargs -p rm

# 处理文件名中的空格
find . -name "*.txt" -print0 | xargs -0 wc -l

3.3 fd + xargs/parallel组合 ⭐⭐⭐⭐⭐

# fd更快更友好的find替代
brew install fd

# 批量处理
fd -e jpg -x convert {} -resize 800 {}

# 结合parallel
fd -e js | parallel -j 8 'eslint --fix {}'

# 批量重命名
fd -e txt -x mv {} {.}.md

4. 脚本生成器与AI工具

4.1 aichat ⭐⭐⭐⭐⭐

核心特点

  • 命令行AI助手
  • 支持多种AI模型
  • 脚本生成
  • 命令解释
brew install aichat

# 生成脚本
aichat "写一个批量重命名文件的bash脚本"

# 解释命令
aichat "解释这个命令: find . -name '*.log' -mtime +7 -delete"

# Shell集成
aichat --role shell "如何批量压缩目录下的所有图片"

# 代码审查
cat script.sh | aichat "检查这个脚本的问题"

4.2 LLM CLI ⭐⭐⭐⭐

pip install llm

# 生成脚本
llm "创建一个监控CPU使用率的bash脚本"

# 解释错误
cat error.log | llm "分析这个错误"

# 代码优化
cat slow-script.sh | llm "优化这个脚本的性能"

4.3 GitHub Copilot CLI ⭐⭐⭐⭐⭐

npm install -g @githubnext/github-copilot-cli

# 解释命令
github-copilot-cli what-the-shell "查找大于100MB的文件"

# 生成命令
github-copilot-cli git-assist "撤销最后一次提交但保留更改"

5. 实用脚本模板库

5.1 批量文件处理模板

#!/bin/bash
# batch-process-template.sh
# 通用批量处理模板

set -euo pipefail # 严格模式

# 颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
NC='\033[0m'

log_info() { echo -e "${GREEN}[INFO]${NC} $*"; }
log_error() { echo -e "${RED}[ERROR]${NC} $*" \>&2; }

# 配置
INPUT_DIR="${1:-.}"
OUTPUT_DIR="${2:-./output}"
PARALLEL_JOBS=4
DRY_RUN=false

# 解析参数
while [[ $# -gt 0 ]]; do
case $1 in
-i|--input) INPUT_DIR="$2"; shift 2 ;;
-o|--output) OUTPUT_DIR="$2"; shift 2 ;;
-j|--jobs) PARALLEL_JOBS="$2"; shift 2 ;;
--dry-run) DRY_RUN=true; shift ;;
*) shift ;;
esac
done

# 创建输出目录
mkdir -p "$OUTPUT_DIR"

# 处理单个文件的函数
process_file() {
local input="$1"
local filename=$(basename "$input")
local output="$OUTPUT_DIR/$filename"

log_info "处理: $input"

if [[ "$DRY_RUN" == true ]]; then
echo "模拟: $input -\> $output"
return
fi

# 在这里添加实际处理逻辑
# 例如: convert "$input" -resize 800x600 "$output"

log_info "完成: $output"
}

# 导出函数供parallel使用
export -f process_file log_info log_error
export OUTPUT_DIR DRY_RUN RED GREEN NC

# 查找并并行处理文件
find "$INPUT_DIR" -type f \( -name "*.jpg" -o -name "*.png" \) | \
parallel -j "$PARALLEL_JOBS" --progress process_file {}

log_info "所有文件处理完成!"

5.2 安全备份模板

#!/bin/bash
# safe-backup-template.sh
# 安全备份模板 (增量备份 + 压缩 + 验证)

set -euo pipefail

# 配置
BACKUP_SOURCE="/path/to/source"
BACKUP_DEST="/path/to/backup"
BACKUP_NAME="backup_$(date +%Y%m%d_%H%M%S)"
RETENTION_DAYS=30
LOG_FILE="/var/log/backup.log"

# 日志函数
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $*" | tee -a "$LOG_FILE"
}

# 错误处理
trap 'log "错误: 脚本执行失败 (行号: $LINENO)"' ERR

# 检查源目录
if [[ ! -d "$BACKUP_SOURCE" ]]; then
log "错误: 源目录不存在: $BACKUP_SOURCE"
exit 1
fi

# 创建备份目录
mkdir -p "$BACKUP_DEST"

log "开始备份: $BACKUP_SOURCE -\> $BACKUP_DEST/$BACKUP_NAME"

# 使用rsync进行增量备份
rsync -avz \
--delete \
--link-dest="$BACKUP_DEST/latest" \
"$BACKUP_SOURCE/" \
"$BACKUP_DEST/$BACKUP_NAME/"

# 更新latest链接
ln -snf "$BACKUP_NAME" "$BACKUP_DEST/latest"

# 压缩备份
log "压缩备份..."
tar -czf "$BACKUP_DEST/$BACKUP_NAME.tar.gz" \
-C "$BACKUP_DEST" "$BACKUP_NAME"

# 验证压缩文件
if tar -tzf "$BACKUP_DEST/$BACKUP_NAME.tar.gz" \> /dev/null; then
log "备份验证成功"
# 删除未压缩的目录
rm -rf "$BACKUP_DEST/$BACKUP_NAME"
else
log "错误: 备份验证失败"
exit 1
fi

# 清理旧备份
log "清理旧备份..."
find "$BACKUP_DEST" -name "backup_*.tar.gz" -mtime "+$RETENTION_DAYS" -delete

# 统计
BACKUP_SIZE=$(du -sh "$BACKUP_DEST/$BACKUP_NAME.tar.gz" | cut -f1)
TOTAL_BACKUPS=$(find "$BACKUP_DEST" -name "backup_*.tar.gz" | wc -l)

log "备份完成!"
log "备份大小: $BACKUP_SIZE"
log "现有备份数: $TOTAL_BACKUPS"

5.3 系统监控模板

#!/bin/bash
# system-monitor-template.sh
# 系统监控并发送告警

# 阈值配置
CPU_THRESHOLD=80
MEMORY_THRESHOLD=85
DISK_THRESHOLD=90

# 通知配置
NOTIFICATION_EMAIL="admin@example.com"
SLACK_WEBHOOK="https://hooks.slack.com/services/xxx"

# 获取系统指标
get_cpu_usage() {
top -l 1 | grep "CPU usage" | awk '{print $3}' | sed 's/%//'
}

get_memory_usage() {
vm_stat | perl -ne '/page size of (\d+)/ and $size=$1; /Pages\s+([^:]+)[^\d]+(\d+)/ and printf("%-16s % 16.2f Mi\n", "$1:", $2 * $size / 1048576);' | awk '/wired/ || /active/ {sum+=$2} END {printf "%.0f", sum/1024*100/16}' # 示例,需根据实际调整
}

get_disk_usage() {
df -h / | awk 'NR==2 {print $5}' | sed 's/%//'
}

# 发送告警
send_alert() {
local message="$1"

# 系统通知
osascript -e "display notification \"$message\" with title \"系统告警\""

# Slack通知
if [[ -n "$SLACK_WEBHOOK" ]]; then
curl -X POST "$SLACK_WEBHOOK" \
-H 'Content-Type: application/json' \
-d "{\"text\": \"$message\"}"
fi
}

# 检查指标
check_metrics() {
local cpu=$(get_cpu_usage)
local memory=$(get_memory_usage)
local disk=$(get_disk_usage)

echo "CPU: ${cpu}% | Memory: ${memory}% | Disk: ${disk}%"

if (( $(echo "$cpu \> $CPU_THRESHOLD" | bc -l) )); then
send_alert "CPU使用率过高: ${cpu}%"
fi

if (( $(echo "$memory \> $MEMORY_THRESHOLD" | bc -l) )); then
send_alert "内存使用率过高: ${memory}%"
fi

if (( $(echo "$disk \> $DISK_THRESHOLD" | bc -l) )); then
send_alert "磁盘使用率过高: ${disk}%"
fi
}

# 主循环
while true; do
check_metrics
sleep 300 # 每5分钟检查一次
done

5.4 Git批量操作模板

#!/bin/bash
# git-bulk-operations.sh
# 批量Git仓库操作

REPOS_DIR="${1:-$HOME/projects}"

# 遍历所有Git仓库
find "$REPOS_DIR" -name ".git" -type d | while read gitdir; do
repo=$(dirname "$gitdir")
echo "=== $repo ==="

cd "$repo" || continue

# 获取当前分支
branch=$(git rev-parse --abbrev-ref HEAD)

# 检查未提交更改
if ! git diff-index --quiet HEAD --; then
echo " ⚠️ 有未提交的更改"
fi

# 拉取最新代码
git pull origin "$branch" 2\\>&1 | sed 's/^/ /'

# 清理已合并分支
git branch --merged | grep -v "\*" | grep -v "main" | grep -v "master" | xargs -r git branch -d

echo ""
done

6. 脚本管理工具

6.1 Scriptisto ⭐⭐⭐⭐

核心特点

  • 脚本依赖管理
  • 自动编译
  • 语言无关
brew install scriptisto

# Python脚本示例
#!/usr/bin/env scriptisto
# scriptisto-begin
# script_src: main.py
# build_cmd: pip install -r requirements.txt
# scriptisto-end

import requests

print(requests.get('https://api.github.com').json())

6.2 direnv ⭐⭐⭐⭐⭐

核心特点

  • 目录级环境变量
  • 自动加载.envrc
brew install direnv

# Zsh集成
echo 'eval "$(direnv hook zsh)"' \>\> ~/.zshrc

# 项目目录
cd ~/project
cat \> .envrc << 'EOF'
export DATABASE_URL="postgresql://localhost/mydb"
export API_KEY="secret"
export PATH=$PWD/bin:$PATH
EOF

# 授权
direnv allow

7. 实用脚本生成快捷方式

7.1 Shell别名快速生成脚本

# 添加到 ~/.zshrc 或 ~/.bashrc

# 快速创建脚本
mkscript() {
local name="${1:-script.sh}"
cat \> "$name" << 'SCRIPT'
#!/bin/bash
set -euo pipefail

# 脚本逻辑
echo "Hello, World!"
SCRIPT
chmod +x "$name"
echo "已创建脚本: $name"
}

# 快速创建批处理脚本
mkbatch() {
local name="${1:-batch.sh}"
cat \> "$name" << 'SCRIPT'
#!/bin/bash
set -euo pipefail

# 批处理模板
INPUT_DIR="${1:-.}"
OUTPUT_DIR="${2:-./output}"

mkdir -p "$OUTPUT_DIR"

find "$INPUT_DIR" -type f | while read file; do
echo "处理: $file"
# 添加处理逻辑
done

echo "完成!"
SCRIPT
chmod +x "$name"
echo "已创建批处理脚本: $name"
}

# 快速创建定时任务
mkcron() {
local name="${1:-task.sh}"
local schedule="${2:-0 2 * * *}"

# 创建脚本
cat \> "$name" << 'SCRIPT'
#!/bin/bash
set -euo pipefail

# 定时任务逻辑
echo "[$(date)] 任务执行" \>\> /tmp/cron.log
SCRIPT
chmod +x "$name"

# 添加到crontab
(crontab -l 2\\>/dev/null; echo "$schedule $(pwd)/$name") | crontab -
echo "已创建定时任务: $schedule $name"
}

使用:

# 创建普通脚本
mkscript my-tool.sh

# 创建批处理脚本
mkbatch image-processor.sh

# 创建定时任务(每天凌晨2点)
mkcron backup.sh "0 2 * * *"

8. 综合示例:生产级批处理工具

#!/usr/bin/env bash
# @describe 生产级图片批处理工具
# @version 2.0.0
# @author Your Name

set -euo pipefail

# 颜色定义
readonly RED='\033[0;31m'
readonly GREEN='\033[0;32m'
readonly YELLOW='\033[1;33m'
readonly NC='\033[0m'

# 默认配置
readonly DEFAULT_QUALITY=85
readonly DEFAULT_JOBS=4
readonly LOG_FILE="/tmp/image-batch-$(date +%s).log"

# 日志函数
log() { echo -e "${GREEN}[$(date '+%H:%M:%S')]${NC} $*" | tee -a "$LOG_FILE"; }
warn() { echo -e "${YELLOW}[WARN]${NC} $*" | tee -a "$LOG_FILE"; }
error() { echo -e "${RED}[ERROR]${NC} $*" | tee -a "$LOG_FILE" \>&2; }

# 错误处理
trap 'error "脚本执行失败 (行: $LINENO, 命令: $BASH_COMMAND)"' ERR

# @cmd 批量压缩图片
# @option -i --input=<dir\> 输入目录 @required
# @option -o --output=<dir\> 输出目录 @required
# @option -q --quality=\\<1-100\\> 图片质量 @default(85)
# @option -j --jobs=<num\> 并行任务数 @default(4)
# @flag -r --recursive 递归处理子目录
# @flag --dry-run 仅预览,不实际处理
compress() {
local input="${argc_input}"
local output="${argc_output}"
local quality="${argc_quality:-$DEFAULT_QUALITY}"
local jobs="${argc_jobs:-$DEFAULT_JOBS}"
local recursive="${argc_recursive:-}"
local dry_run="${argc_dry_run:-}"

# 验证
[[ ! -d "$input" ]] && { error "输入目录不存在: $input"; exit 1; }

# 创建输出目录
[[ "$dry_run" != "1" ]] && mkdir -p "$output"

# 构建find命令
local find_cmd="find '$input'"
[[ "$recursive" != "1" ]] && find_cmd+=" -maxdepth 1"
find_cmd+=" -type f \( -name '*.jpg' -o -name '*.png' -o -name '*.jpeg' \)"

log "开始批量压缩..."
log "输入: $input"
log "输出: $output"
log "质量: $quality"
log "并行: $jobs"

# 定义处理函数
process_image() {
local img="$1"
local quality="$2"
local output_dir="$3"
local dry_run="$4"

local filename=$(basename "$img")
local output_path="$output_dir/$filename"

if [[ "$dry_run" == "1" ]]; then
echo "预览: $img -\> $output_path (质量: $quality)"
else
convert "$img" -quality "$quality" "$output_path" 2\\>/dev/null && \
echo "✓ $filename" || echo "✗ $filename 失败"
fi
}

export -f process_image

# 并行处理
local file_count=$(eval "$find_cmd" | wc -l | tr -d ' ')
log "找到 $file_count 个文件"

eval "$find_cmd" | \
parallel -j "$jobs" --progress --bar \
process_image {} "$quality" "$output" "$dry_run"

log "处理完成!"
log "日志文件: $LOG_FILE"
}

# @cmd 批量添加水印
# @option -i --input=<dir\> 输入目录 @required
# @option -o --output=<dir\> 输出目录 @required
# @option -t --text=<str\> 水印文字 @required
# @option -p --position=<str\> 位置 @choice(center,northeast,southeast,southwest,northwest) @default(southeast)
# @option -s --size=<num\> 字体大小 @default(30)
# @option -j --jobs=<num\> 并行数 @default(4)
watermark() {
local input="${argc_input}"
local output="${argc_output}"
local text="${argc_text}"
local position="${argc_position:-southeast}"
local size="${argc_size:-30}"
local jobs="${argc_jobs:-4}"

mkdir -p "$output"

log "批量添加水印..."

find "$input" -type f \( -name "*.jpg" -o -name "*.png" \) | \
parallel -j "$jobs" --progress \
convert {} -gravity "$position" \
-pointsize "$size" -fill white \
-annotate +10+10 "$text" \
"$output/{/}"

log "完成!"
}

# @cmd 批量调整尺寸
# @option -i --input=<dir\> 输入目录 @required
# @option -o --output=<dir\> 输出目录 @required
# @option -w --width=<num\> 宽度
# @option -h --height=<num\> 高度
# @option -p --percentage=<num\> 缩放百分比
# @option -j --jobs=<num\> 并行数 @default(4)
resize() {
local input="${argc_input}"
local output="${argc_output}"
local width="${argc_width:-}"
local height="${argc_height:-}"
local percentage="${argc_percentage:-}"
local jobs="${argc_jobs:-4}"

mkdir -p "$output"

# 确定resize参数
local resize_param=""
if [[ -n "$percentage" ]]; then
resize_param="${percentage}%"
elif [[ -n "$width" && -n "$height" ]]; then
resize_param="${width}x${height}!"
elif [[ -n "$width" ]]; then
resize_param="${width}"
else
error "必须指定宽度、高度或百分比"
exit 1
fi

log "批量调整尺寸: $resize_param"

find "$input" -type f \( -name "*.jpg" -o -name "*.png" \) | \
parallel -j "$jobs" --progress \
convert {} -resize "$resize_param" "$output/{/}"

log "完成!"
}

# argc框架
eval "$(argc --argc-eval "$0" "$@")"

使用示例

chmod +x image-tool.sh

# 批量压缩
./image-tool.sh compress -i ./photos -o ./compressed -q 80 -j 8

# 预览模式
./image-tool.sh compress -i ./photos -o ./compressed --dry-run

# 递归处理
./image-tool.sh compress -i ./photos -o ./compressed -r

# 添加水印
./image-tool.sh watermark -i ./photos -o ./watermarked \
-t "© 2025" -p southeast -s 40

# 批量缩放
./image-tool.sh resize -i ./photos -o ./resized -p 50
./image-tool.sh resize -i ./photos -o ./resized -w 800 -h 600

9. 总结与最佳实践

工具选择建议

需求推荐工具理由
快速创建CLI工具argc注释即配置,简单快速
复杂CLI工具Bashly功能完整,专业
批量并行处理GNU Parallel强大且成熟
任务调度launchdmacOS原生,稳定
脚本生成AI工具(aichat)快速高效
环境管理direnv项目隔离

脚本编写最佳实践

  1. 严格模式: 始终使用 set -euo pipefail
  2. 错误处理: 使用 trap 捕获错误
  3. 日志记录: 输出带时间戳的日志
  4. 参数验证: 验证所有输入参数
  5. 幂等性: 脚本可重复执行
  6. 进度提示: 长时间任务显示进度
  7. 并行处理: 合理使用parallel加速
  8. 测试: 先用--dry-run测试
  9. 文档: 清晰的帮助信息
  10. 版本控制: 脚本也要用Git管理

批量生产脚本workflow

# 1. 使用AI快速生成基础脚本
aichat "创建一个批量图片处理工具"

# 2. 添加argc注释规范化参数
# (编辑脚本添加 @cmd, @option等注释)

# 3. 测试
./script.sh --help
./script.sh compress --dry-run -i test -o output

# 4. 使用parallel加速
# (在处理循环中使用parallel替代for)

# 5. 添加launchd自动化
# (创建plist文件实现定时执行)

# 6. 版本控制
git add script.sh
git commit -m "feat: add batch image processing tool"

十、小众与特定领域工具

1. 音视频处理工具

FFmpeg - 音视频处理瑞士军刀

安装

brew install ffmpeg

核心功能

  • 视频格式转换、压缩、剪辑
  • 音频提取、混音、降噪
  • 字幕添加、水印添加
  • 流媒体处理

常用命令

# 视频压缩
ffmpeg -i input.mp4 -c:v libx264 -crf 23 -c:a aac -b:a 128k output.mp4

# 提取音频
ffmpeg -i video.mp4 -vn -acodec libmp3lame -q:a 2 audio.mp3

# 视频剪辑
ffmpeg -i input.mp4 -ss 00:00:30 -t 00:01:00 -c copy output.mp4

# 批量转换
for file in *.avi; do
ffmpeg -i "$file" -c:v libx264 "${file%.avi}.mp4"
done

# 添加水印
ffmpeg -i input.mp4 -i logo.png -filter_complex \
"overlay=W-w-10:H-h-10" output.mp4

# 合并视频
ffmpeg -f concat -safe 0 -i filelist.txt -c copy output.mp4

# 生成GIF
ffmpeg -i video.mp4 -vf "fps=10,scale=320:-1" output.gif

# 视频截图
ffmpeg -i video.mp4 -ss 00:00:05 -vframes 1 screenshot.jpg

ImageMagick - 图片处理专家

安装

brew install imagemagick

常用命令

# 批量压缩
find . -name "*.jpg" | parallel -j 4 \
'convert {} -quality 80 compressed/{/}'

# 批量缩放
mogrify -resize 50% *.jpg

# 添加水印
convert input.jpg -gravity southeast \
-pointsize 30 -fill white -annotate +10+10 "© 2025" output.jpg

# 批量格式转换
mogrify -format png *.jpg

# 图片拼接
convert img1.jpg img2.jpg img3.jpg +append horizontal.jpg
convert img1.jpg img2.jpg img3.jpg -append vertical.jpg

# 生成缩略图
convert -thumbnail 200x200 input.jpg thumb.jpg

yt-dlp - YouTube下载工具

安装

brew install yt-dlp

常用命令

# 下载最高质量视频
yt-dlp <URL\>

# 下载音频
yt-dlp -x --audio-format mp3 <URL\>

# 下载字幕
yt-dlp --write-sub --sub-lang en <URL\>

# 批量下载
yt-dlp -a urls.txt

# 下载播放列表
yt-dlp -f 'bestvideo+bestaudio' --yes-playlist <URL\>

2. 网络分析工具

nmap - 网络扫描神器

安装

brew install nmap

常用命令

# 扫描主机端口
nmap 192.168.1.1

# 扫描整个网段
nmap 192.168.1.0/24

# 检测操作系统
nmap -O 192.168.1.1

# 扫描特定端口
nmap -p 80,443,3306 192.168.1.1

# 服务版本检测
nmap -sV 192.168.1.1

# 快速扫描
nmap -F 192.168.1.1

mtr - 网络诊断工具

安装

brew install mtr

使用

# 实时路由追踪
mtr google.com

# 报告模式
mtr --report --report-cycles 10 google.com

# TCP模式
mtr --tcp --port 443 google.com

tcpdump - 数据包捕获

使用

# 抓取特定端口
sudo tcpdump -i en0 port 80

# 抓取特定主机
sudo tcpdump -i en0 host 192.168.1.1

# 保存到文件
sudo tcpdump -i en0 -w capture.pcap

# 只抓取HTTP请求
sudo tcpdump -i en0 -A 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<\\<2)) - ((tcp[12]&0xf0)\>\>2)) != 0)'

bandwhich - 带宽监控

安装

brew install bandwhich

使用

sudo bandwhich

3. 数据处理工具

jq - JSON处理器

安装

brew install jq

常用命令

# 格式化JSON
cat data.json | jq '.'

# 提取字段
cat data.json | jq '.users[].name'

# 过滤数据
cat data.json | jq '.users[] | select(.age \> 18)'

# 统计数组长度
cat data.json | jq '.users | length'

# 转换数据
cat data.json | jq '.users[] | {name, email}'

# 多个JSON文件合并
jq -s '.[0] * .[1]' file1.json file2.json

# 从API获取并处理
curl -s https://api.github.com/users/octocat | jq '.name'

yq - YAML/JSON处理器

安装

brew install yq

常用命令

# 读取YAML
yq '.database.host' config.yaml

# 修改YAML
yq -i '.database.port = 3306' config.yaml

# YAML转JSON
yq -o json config.yaml

# JSON转YAML
yq -P data.json \> data.yaml

# 合并YAML文件
yq eval-all 'select(fileIndex == 0) * select(fileIndex == 1)' \
file1.yaml file2.yaml

miller (mlr) - CSV/JSON处理

安装

brew install miller

常用命令

# CSV转JSON
mlr --icsv --ojson cat data.csv

# JSON转CSV
mlr --ijson --ocsv cat data.json

# 筛选列
mlr --csv cut -f name,age data.csv

# 过滤行
mlr --csv filter '$age \> 18' data.csv

# 统计
mlr --csv stats1 -a mean,sum -f age data.csv

# 排序
mlr --csv sort -f age data.csv

csvkit - CSV工具集

安装

brew install csvkit

常用命令

# CSV转JSON
csvjson data.csv

# 查看CSV统计
csvstat data.csv

# SQL查询CSV
csvsql --query "SELECT name, age FROM data WHERE age \> 18" data.csv

# 合并CSV
csvstack file1.csv file2.csv \> merged.csv

# 提取列
csvcut -c name,age data.csv

4. 容器与云工具

dive - Docker镜像分析

安装

brew install dive

使用

# 分析镜像
dive nginx:latest

# 查看镜像每层大小
dive nginx:latest --ci

ctop - 容器监控

安装

brew install ctop

使用

ctop

lazydocker - Docker TUI管理器

安装

brew install lazydocker

使用

lazydocker

aws-cli - AWS命令行工具

安装

brew install awscli

常用命令

# 配置
aws configure

# S3操作
aws s3 ls
aws s3 cp file.txt s3://bucket/
aws s3 sync ./local s3://bucket/

# EC2操作
aws ec2 describe-instances
aws ec2 start-instances --instance-ids i-xxxxx
aws ec2 stop-instances --instance-ids i-xxxxx

# Lambda
aws lambda list-functions
aws lambda invoke --function-name MyFunction output.json

5. 密码与安全工具

pass - Unix密码管理器

安装

brew install pass

使用

# 初始化
pass init your-gpg-id

# 添加密码
pass insert Email/gmail

# 查看密码
pass Email/gmail

# 生成密码
pass generate Email/outlook 20

# 列出所有密码
pass

# 删除密码
pass rm Email/gmail

1password-cli - 1Password命令行

安装

brew install --cask 1password-cli

使用

# 登录
op signin

# 列出项目
op item list

# 获取密码
op item get "GitHub" --fields password

# 创建项目
op item create --category=login \
--title="Example" \
--vault="Personal" \
username=user@example.com

gpg - 加密工具

安装

brew install gnupg

常用命令

# 生成密钥
gpg --gen-key

# 加密文件
gpg -e -r recipient@example.com file.txt

# 解密文件
gpg -d file.txt.gpg \> file.txt

# 签名文件
gpg --sign file.txt

# 验证签名
gpg --verify file.txt.sig

6. 数据库工具

redis-cli - Redis命令行

安装

brew install redis

常用命令

# 连接
redis-cli

# 远程连接
redis-cli -h host -p 6379 -a password

# 执行命令
redis-cli SET key "value"
redis-cli GET key

# 批量操作
redis-cli --pipe < commands.txt

# 监控
redis-cli MONITOR

# 性能测试
redis-cli --latency
redis-cli --stat

mongosh - MongoDB Shell

安装

brew install mongosh

使用

# 连接
mongosh "mongodb://localhost:27017"

# 使用数据库
use mydb

# 查询
db.users.find()
db.users.find({age: {$gt: 18}})

# 插入
db.users.insertOne({name: "John", age: 30})

# 更新
db.users.updateOne({name: "John"}, {$set: {age: 31}})

7. 性能分析工具

hyperfine - 命令行基准测试

安装

brew install hyperfine

使用

# 比较命令性能
hyperfine 'grep pattern file' 'rg pattern file'

# 多次运行
hyperfine --runs 100 'my-command'

# 预热
hyperfine --warmup 3 'my-command'

# 导出结果
hyperfine --export-json results.json 'command1' 'command2'

flamegraph - 火焰图生成

安装

brew install flamegraph

使用

# 生成CPU火焰图
sudo dtrace -x ustackframes=100 -n \
'profile-997 /pid == $target/ { @[ustack()] = count(); }' \
-p <PID\> -o out.stacks
stackcollapse.pl out.stacks | flamegraph.pl \> flame.svg

8. 文本处理工具

pandoc - 文档格式转换

安装

brew install pandoc

常用命令

# Markdown转PDF
pandoc input.md -o output.pdf

# Markdown转Word
pandoc input.md -o output.docx

# HTML转Markdown
pandoc input.html -o output.md

# 批量转换
for file in *.md; do
pandoc "$file" -o "${file%.md}.pdf"
done

recode - 编码转换

安装

brew install recode

使用

# GBK转UTF-8
recode gbk..utf8 file.txt

# 批量转换
find . -name "*.txt" -exec recode gbk..utf8 {} \;

9. 系统工具

ncdu - 磁盘分析

安装

brew install ncdu

使用

# 分析当前目录
ncdu

# 分析特定目录
ncdu /Users

# 导出结果
ncdu -o export.json /path

duf - 磁盘使用可视化

安装

brew install duf

使用

duf

10. 开发辅助工具

watchexec - 文件监控执行

安装

brew install watchexec

使用

# 监控文件变化并执行命令
watchexec -e js,jsx npm test

# 监控并重启服务
watchexec -r python app.py

# 清屏重新执行
watchexec -c make build

entr - 文件变化触发

安装

brew install entr

使用

# 监控文件变化
find . -name "*.py" | entr pytest

# 监控并重启
ls *.go | entr -r go run main.go

# 交互式重载
echo main.c | entr -c make test

11. 工具选择指南

音视频处理场景

需求推荐工具理由
视频压缩/转换FFmpeg功能最全,性能最好
图片批量处理ImageMagick专业强大
视频下载yt-dlp支持最多平台
音频编辑sox命令行音频瑞士军刀

网络分析场景

需求推荐工具理由
端口扫描nmap行业标准
网络诊断mtr替代traceroute+ping
流量分析tcpdump底层抓包
带宽监控bandwhich直观易用

数据处理场景

需求推荐工具理由
JSON处理jq最强大的JSON工具
YAML处理yq与jq语法一致
CSV处理miller功能全面
格式转换pandoc支持格式最多

容器与云场景

需求推荐工具理由
Docker管理lazydockerTUI界面友好
镜像分析dive可视化层级
AWS操作aws-cli官方工具
K8s管理k9sTUI交互式

12. 实战脚本示例

批量视频压缩脚本

#!/usr/bin/env bash
# video-compress.sh - 批量压缩视频

set -euo pipefail

INPUT_DIR="${1:-.}"
OUTPUT_DIR="${2:-./compressed}"
CRF="${3:-23}" # 质量 (18-28, 越小质量越好)
JOBS="${4:-4}" # 并行数

mkdir -p "$OUTPUT_DIR"

compress_video() {
local input="$1"
local output="$OUTPUT_DIR/$(basename "$input")"

ffmpeg -i "$input" \
-c:v libx264 -crf "$CRF" \
-preset medium \
-c:a aac -b:a 128k \
-movflags +faststart \
"$output" 2\\>&1 | grep -E "size=|time=" || true
}

export -f compress_video
export OUTPUT_DIR CRF

find "$INPUT_DIR" -type f \( -name "*.mp4" -o -name "*.avi" -o -name "*.mov" \) | \
parallel -j "$JOBS" --progress compress_video {}

echo "压缩完成! 输出目录: $OUTPUT_DIR"

网络诊断一键脚本

#!/usr/bin/env bash
# network-check.sh - 网络诊断

set -euo pipefail

TARGET="${1:-google.com}"

echo "=== 网络诊断: $TARGET ==="
echo

echo "1. Ping 测试:"
ping -c 4 "$TARGET"
echo

echo "2. 路由追踪:"
mtr --report --report-cycles 5 "$TARGET"
echo

echo "3. DNS解析:"
dig +short "$TARGET"
echo

echo "4. HTTP响应:"
curl -sI "https://$TARGET" | head -n 5
echo

echo "5. 端口扫描:"
nmap -F "$TARGET"

JSON数据处理流水线

#!/usr/bin/env bash
# json-pipeline.sh - JSON数据处理

# API -\> 过滤 -\> 转换 -\> 统计 -\> 导出

curl -s https://api.github.com/repos/microsoft/vscode/contributors | \
jq '[.[] | select(.contributions \> 100)]' | \
jq 'map({login, contributions, url: .html_url})' | \
jq 'sort_by(.contributions) | reverse' | \
jq -r '(["User", "Contributions", "URL"] | @csv), (.[] | [.login, .contributions, .url] | @csv)' \
\> top_contributors.csv

echo "导出完成: top_contributors.csv"

13. 总结

必装小众工具 Top 10

  1. FFmpeg - 音视频处理必备
  2. jq - JSON处理神器
  3. nmap - 网络安全扫描
  4. dive - Docker镜像分析
  5. hyperfine - 性能基准测试
  6. yq - YAML处理
  7. mtr - 网络诊断
  8. watchexec - 文件监控
  9. ncdu - 磁盘分析
  10. 1password-cli - 密码管理

一键安装命令

# 音视频处理
brew install ffmpeg imagemagick yt-dlp

# 网络分析
brew install nmap mtr bandwhich

# 数据处理
brew install jq yq miller csvkit

# 容器工具
brew install dive ctop lazydocker

# 密码安全
brew install pass gnupg

# 系统工具
brew install ncdu duf hyperfine watchexec entr

# 文档处理
brew install pandoc

十一、完整配置方案推荐

🎯 方案 1: 传统全能派

终端: iTerm2
Shell: Zsh + Oh My Zsh
提示符: Powerlevel10k
字体: MesloLGS NF
配色: Dracula
终端复用: tmux
文件管理: ranger
系统监控: btop
脚本工具: getopts + 手写
批量处理: xargs

🎯 方案 2: 现代化极客

终端: Warp
Shell: Fish
提示符: Starship
字体: JetBrains Mono Nerd Font
配色: Tokyo Night
文件管理: broot
系统监控: glances
脚本工具: argc
批量处理: GNU Parallel
任务调度: launchd
AI助手: aichat

🎯 方案 3: 极致性能

终端: Alacritty
Shell: Zsh(最小配置)
提示符: Starship
终端复用: zellij
字体: Hack Nerd Font
文件管理: nnn
系统监控: btop
脚本工具: 纯Bash
批量处理: GNU Parallel

🎯 方案 4: 批量自动化专家(新增)

终端: iTerm2 / Warp
Shell: Zsh + Starship
脚本框架: argc(日常)+ Bashly(复杂项目)
批量处理: GNU Parallel
任务调度: launchd
脚本生成: aichat + GitHub Copilot CLI
环境管理: direnv
实用工具:
- fd (快速文件查找)
- ripgrep (内容搜索)
- jq (JSON处理)
- yq (YAML处理)

快速脚本模板:
- mkscript (通用脚本)
- mkbatch (批处理脚本)
- mkcron (定时任务)

十二、总结

核心推荐

必装工具

  1. 终端 - Warp(现代化)/ iTerm2(全能)
  2. 提示符 - Starship
  3. 模糊搜索 - fzf
  4. 文件管理 - ranger / nnn
  5. 系统监控 - btop
  6. HTTP 客户端 - httpie
  7. 快速跳转 - z / autojump
  8. 脚本框架 - argc(推荐)/ Bashly
  9. 批量处理 - GNU Parallel
  10. AI助手 - aichat

最小化起步(5分钟配置):

brew install --cask iterm2
brew install starship fzf btop
brew install --cask font-meslo-lg-nerd-font

# ~/.zshrc
eval "$(starship init zsh)"

脚本自动化起步(10分钟配置):

# 安装核心工具
brew install argc parallel aichat fd

# 添加快捷函数到 ~/.zshrc
cat \>\> ~/.zshrc << 'EOF'
# 快速创建脚本
mkscript() {
local name="${1:-script.sh}"
cat \> "$name" << 'SCRIPT'
#!/bin/bash
set -euo pipefail
echo "Hello, World!"
SCRIPT
chmod +x "$name"
echo "已创建: $name"
}

# 快速创建批处理脚本
mkbatch() {
local name="${1:-batch.sh}"
cat \> "$name" << 'SCRIPT'
#!/bin/bash
set -euo pipefail
find "${1:-.}" -type f | parallel -j 4 echo "处理: {}"
SCRIPT
chmod +x "$name"
echo "已创建批处理脚本: $name"
}
EOF

source ~/.zshrc

进阶配置(1小时):

  • iTerm2 完整配置
  • Zsh + Oh My Zsh
  • Powerlevel10k
  • 所有推荐工具
  • 脚本模板库
  • launchd定时任务

脚本自动化快速参考

批量图片处理

# 批量压缩 (parallel)
find . -name "*.jpg" | parallel -j 4 'convert {} -quality 80 compressed/{/}'

# 批量重命名 (fd + parallel)
fd -e txt | parallel mv {} {.}.md

# 批量添加水印
find . -name "*.png" | parallel \
'convert {} -gravity southeast -annotate +10+10 "© 2025" watermarked/{/}'

定时任务

# 创建 ~/Library/LaunchAgents/com.user.backup.plist
# 每天凌晨2点自动备份
launchctl load ~/Library/LaunchAgents/com.user.backup.plist

AI辅助脚本生成

# 快速生成脚本
aichat "创建一个批量压缩视频的bash脚本"

# 优化现有脚本
cat slow.sh | aichat "优化这个脚本的性能"

# 解释复杂命令
aichat "解释: find . -name '*.log' -mtime +7 -delete"

最后更新时间:2025-11-09 调研范围:60+ Mac 终端工具(含小众特定领域工具) 重点推荐:iTerm2、Warp、Starship、Fish、fzf、ranger、btop、argc、GNU Parallel、aichat、FFmpeg、jq、nmap、dive