跳到内容

元数据卡

  • 前置知识:ch02-env-path
  • 预计时间:8 分钟
  • 阅读模式:理解管道思维比记命令参数重要

批量处理的需求

你建好了目录,放好了文件。然后你发现一个问题:你有二十个日志文件需要改后缀名,或者三十个测试文件要移动到一个子目录里。

一个一个敲文件名——敲到第五个的时候,手酸了。

"你听说过工坊里的那种符文吗?"工坊主人从墙上取下一根铁棒。"它能影响一排武器,而不是一次只碰一把。"

你有一堆文件要一起处理。Shell 的通配符就是为此而生的。

通配符模式速查

模式匹配规则例子会匹配到的文件
*任意字符(0个或多个)*.txt所有 .txt 结尾的文件
?任意单个字符report-?.txtreport-1.txtreport-a.txt
[abc]集合里的一个report-[13].txtreport-1.txtreport-3.txt
[a-z]范围内的一个[a-z]*.txt以小写字母开头的 .txt 文件

创建一批文件来试

bash
# 造一批测试文件
touch report-2024-01.txt report-2024-02.txt report-2024-03.txt
touch photo-vacation.jpg photo-party.jpg note.txt

用通配符匹配

bash
# 查看所有以 report 开头的文件
ls report-*

# 输出:
# report-2024-01.txt report-2024-02.txt report-2024-03.txt

# 只看 .txt 结尾的
ls *.txt

# 只看 photo- 开头的 .jpg 文件
ls photo-*.jpg

# 名字里带数字的
ls *[0-9]*

# 只拿 report 1 和 report 3,跳过 2
ls report-2024-0[13].txt

语言:Shell (Bash/Zsh) 如何运行:先造测试文件,然后用通配符 ls预期输出:符合模式的文件列表 你试试ls *.{txt,jpg} 匹配 txt 和 jpg 两种后缀

管道 | :传送带

"通配符帮你在同一个命令里批量选择文件。"工坊主人拿起两根铁管,一头接在一起。"但如果你想把两个命令的能量连在一起呢?"

管道符号 | 做一件事:把左边命令的输出,当成右边命令的输入。

想象一条传送带——水流经过不同的过滤器,最后变成你想要的样子。

bash
# 数一数当前目录有多少个文件
ls | wc -l

# 只显示进程里含 chrome 的
ps aux | grep chrome

# 看系统日志最后 5 行里是不是有 error
tail -100 /var/log/syslog | grep -i error

语言:Shell (Bash/Zsh) 如何运行:逐条输入 预期输出:第一条输出文件数量,第二条列出 chrome 相关进程 你试试ls -la | sort -k5 -n | tail -3 找当前目录最大的三个文件

管道的思维模式

管道把问题拆成小步骤。每个命令只做一件事、做好它——这就是 Unix 哲学

举个例子:找出当前目录最大的 .log 文件。

bash
# 1. 看看有哪些 .log
ls *.log

# 2. 带大小信息
ls -lh *.log

# 3. 按大小排序
ls -lh *.log | sort -k5 -h

# 4. 只看最大的那个
ls -lh *.log | sort -k5 -h | tail -1

# 5. 只保留文件名
ls -lh *.log | sort -k5 -h | tail -1 | awk '{print $NF}'

语言:Shell (Bash/Zsh) 如何运行:在含有 .log 文件的目录中执行 你试试:一步一步加管道,每加一个看看输出怎么变

不用急着记住 sortgrepawk 的每一个选项。关键是理解这种思维:问题拆成小步,每步输出交给下一步。

简单批量操作

bash
# 批量重命名 .png 为 .jpg
# 先测试(只打印),不动手
for file in *.png; do
  echo mv "$file" "${file%.png}.jpg"
done

# 确认无误后,去掉 echo 真的执行
for file in *.png; do
  mv "$file" "${file%.png}.jpg"
done

${file%.png} 的意思是:从 $file 的末尾去掉 .png。这是一个叫参数扩展的 Shell 技巧——你现在理解它怎么用就行,不需要背语法。


旅人笔记

通配符是批量选的工具:* 任意字符,? 单个字符,[abc] 集合匹配。
管道 | 是传送带:左边输出 → 右边输入。
问题拆成小步,一步一步用管道串起来。
先用 echo 测试破坏性命令,确认无误再执行。
你不需要记住所有命令。理解"怎么组合它们"更重要。


→ 下一步:命令速查

到这你把终端最核心的用法都过了一遍。需要一个快速参考页随时翻吗?

前往 → 命令速查参考页

Built with VitePress | Software Systems Atlas