元数据卡
- 前置知识:ch02-env-path
- 预计时间:8 分钟
- 阅读模式:理解管道思维比记命令参数重要
批量处理的需求
你建好了目录,放好了文件。然后你发现一个问题:你有二十个日志文件需要改后缀名,或者三十个测试文件要移动到一个子目录里。
一个一个敲文件名——敲到第五个的时候,手酸了。
"你听说过工坊里的那种符文吗?"工坊主人从墙上取下一根铁棒。"它能影响一排武器,而不是一次只碰一把。"
你有一堆文件要一起处理。Shell 的通配符就是为此而生的。
通配符模式速查
| 模式 | 匹配规则 | 例子 | 会匹配到的文件 |
|---|---|---|---|
* | 任意字符(0个或多个) | *.txt | 所有 .txt 结尾的文件 |
? | 任意单个字符 | report-?.txt | report-1.txt、report-a.txt |
[abc] | 集合里的一个 | report-[13].txt | report-1.txt、report-3.txt |
[a-z] | 范围内的一个 | [a-z]*.txt | 以小写字母开头的 .txt 文件 |
创建一批文件来试
# 造一批测试文件
touch report-2024-01.txt report-2024-02.txt report-2024-03.txt
touch photo-vacation.jpg photo-party.jpg note.txt用通配符匹配
# 查看所有以 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 两种后缀
管道 | :传送带
"通配符帮你在同一个命令里批量选择文件。"工坊主人拿起两根铁管,一头接在一起。"但如果你想把两个命令的能量连在一起呢?"
管道符号 | 做一件事:把左边命令的输出,当成右边命令的输入。
想象一条传送带——水流经过不同的过滤器,最后变成你想要的样子。
# 数一数当前目录有多少个文件
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 文件。
# 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 文件的目录中执行 你试试:一步一步加管道,每加一个看看输出怎么变
不用急着记住 sort、grep、awk 的每一个选项。关键是理解这种思维:问题拆成小步,每步输出交给下一步。
简单批量操作
# 批量重命名 .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测试破坏性命令,确认无误再执行。
你不需要记住所有命令。理解"怎么组合它们"更重要。
→ 下一步:命令速查
到这你把终端最核心的用法都过了一遍。需要一个快速参考页随时翻吗?