Contents

Bash 文件名扩展

1. 概述

在 bash 中处理文件时,我们经常使用通配符来匹配文件名。Bash 解释这些字符并执行文件名扩展,这个过程也称为 globbing。

在本教程中,我们将通过提供一些解释通配符及其用法的示例来介绍通配符的概念。

我们应该注意到,虽然通配可能看起来类似于正则表达式,但它们有着根本的不同。

2. 匹配任意字符串

通常,我们将 globbing 与ls 一起使用。假设我们的文件系统中有一个文件夹,其中包含一堆不同类型的文件。现在,如果我们想获得所有文本文件的列表,我们可以cd 到这个文件夹并执行:

$ ls *.txt

在通配符中,* 或星号字符表示任何给定长度的任何字符串。上面命令的输出可能如下所示:

test-2.txt test-3.txt test.txt

3. 匹配单个字符

其中*匹配任意长度的字符串,使用*?* 我们可以只匹配一个字符。例如,我们可以使用一个问号列出所有名为*“test-”*的文本文件,后跟一个数字:

$ ls test-?.txt
test-2.txt test-3.txt

或者,我们可以列出名称正好为四个字符的所有文本文件:

$ ls ????.txt
test.txt

4. 匹配一系列字符

我们看到了如何使用*或*?*匹配任何字符。假设我们有更多关于我们正在寻找的信息。例如,我们可能知道我们只对文件名中包含一些数字的文件感兴趣。这就是范围的用武之地。

范围在方括号内声明。例如,所有数字的范围表示为:

[0-9]

我们使用此模式和星号来搜索名称中带有数字的所有文件:

$ ls *[0-9]*
1234.dat    test-2.txt  test-3.txt  test-99.txt

范围可以应用于字母和数字:

  • [az] = 字母表中的所有小写字符
  • [AZ] = 字母表中的所有大写字符
  • [a-zA-Z] = 字母表中的所有字符,不分大小写
  • [jp] = 小写字符j、k、l、m、n、o或p
  • [a-z3-6] = 小写字符或数字3、4、5或6

5. 隐藏文件

默认情况下,隐藏文件和文件夹不会显示在ls的输出中。要将 globbing 应用于我们的隐藏文件和文件夹,我们必须显式添加前导 . (点)。

例如:

$ ls *

在我们的主目录中可能会产生:

file.txt

然而:

$ ls .*

可能显示:

.bashrc