简介
想象一下,你有一个很凌乱的房间,地上散落着数百张纸。
- 有些是作业(
math_hw.txt、english_hw.txt)。 - 有些是照片(
pic1.png、pic2.png)。 - 有些是垃圾(
temp_1、temp_2)。
如果你想把所有照片移到一个箱子里,不需要一张一张地捡。你可以说:「捡起所有看起来像照片的东西。」
在 Linux 中,我们使用通配符(也称为 Glob 模式匹配)完成这类操作。它们就像扑克牌中的「Joker」牌,可以代替其他字符。
这种方法非常实用,因为你可以使用匹配规则,而不必逐个输入文件名。在实际系统中,可能有几十、几百甚至几千个匹配的文件。基于模式选择文件,是 Shell 操作能够高效扩展的原因之一。
在本实验中,你将学习两个功能强大的符号:
- 星号(
*):表示任意内容(长度不限)。 - 问号(
?):表示一个单独的字符。
选择多个文件(*)
星号 * 是最常见的通配符。它表示「匹配任意数量的字符(包括零个字符)」。
先查看当前的目录中有什么:
ls
你可以筛选文件。现在,假设你只想列出文本文件(以 .txt 结尾的文件)。
与其输入 ls notes.txt readme.txt report.txt,不如直接输入 *.txt。
它表示:「查找所有以 .txt 结尾的文件。」
ls *.txt
输出:
notes.txt readme.txt report.txt
Shell 会读取 *.txt,将它展开为所有匹配的文本文件,并忽略 image.png 及其他文件。这样就完成了文件列表筛选!
这段操作体现了一个重要概念:ls 命令运行之前,Shell 会先完成模式展开。换句话说,ls 通常接收到的是已经展开好的文件名列表,而不是原始的 *.txt 模式。这也解释了为什么通配符可以用于许多不同的命令。
使用 * 移动文件
现在进行一项实用操作。当前有几个数据文件:data_2025.csv、data_2024.csv、data_old.log。
我们要整理这些文件。将所有以 data_ 开头的文件移动到备份目录中。
首先,创建该目录:
mkdir backup
接下来,使用通配符一次移动所有匹配的文件。模式 data_* 可以匹配所有以 data_ 开头的内容。
mv data_* backup/
这条命令相当于告诉 Linux:「只要文件名以 data_ 开头,就把它放进备份箱。」
通配符的实用价值就在这里。你不必为每个匹配的文件重复执行命令,只需定义一次命名规则,Shell 就会替你展开匹配结果。
确认这些文件已经从当前目录中移除:
ls
然后检查它们是否已经安全到达备份目录:
ls backup
操作成功!你只用一条命令就移动了三个文件。
选择单个字符(?)
星号 * 的匹配范围很宽,会匹配所有内容。有时你需要更精确的匹配方式。
问号 ? 通配符表示恰好一个字符。
因此,? 比 * 更精确。当文件名遵循固定格式,而你又不想误匹配更长的文件名时,问号非常有用。
当前有以下文件:temp_1、temp_2 和 temp_a。
temp_*会匹配temp_1,也会匹配temp_very_long_name。- 只有下划线后面恰好有一个字符时,
temp_?才会匹配。
在删除之前,先测试这个模式(这是一个很好的习惯!):
ls temp_?
匹配结果:temp_1、temp_2、temp_a。
确认匹配结果无误后,删除这些文件:
rm temp_?
确认它们已经被删除:
ls
这种方法非常适合匹配具有特定命名结构的文件。
请记住本步骤中的安全习惯:在将模式用于 rm 或 mv 等会修改文件的命令之前,先使用 ls 等不会产生破坏的命令预览匹配结果。模式匹配功能强大,因此执行操作前先检查结果更加稳妥。
总结
你已经掌握了模式匹配的强大功能。
*(星号):「匹配所有内容」的通配符。适合选择某种类型的所有文件(*.png),或选择某个文件系列中的所有文件(day_*)。?(问号):「匹配单个字符」的通配符。适合进行精确匹配(file_?.txt)。
模块 2 到此结束。现在你已经学会如何:
- 在文件树中导航(
pwd、cd、ls)。 - 创建文件和目录(
touch、mkdir)。 - 复制和移动文件(
cp、mv)。 - 删除文件和目录(
rm、rmdir)。 - 批量选择文件(
*、?)。
接下来你将学习模块 3:打开这些文件,实际读取和编辑其中的文本内容!



