网站搜索

在 Linux 中使用通配符匹配文件名的 10 个实际示例


通配符(也称为元字符)是代表其他字符的符号或特殊字符。您可以将它们与任何命令(例如 ls 命令或 rm 命令)一起使用,以接受地列出或删除与给定条件匹配的文件。

另请阅读:Linux 中链接运算符的 10 个实用示例

这些通配符由 shell 解释,并将结果返回到您运行的命令。 Linux 中主要有以下三种通配符:

  • 星号 (*) – 匹配任意字符的一次或多次出现,包括无字符。
  • 问号 (?) – 表示或匹配任何字符的单个出现。
  • 括号字符 ([ ]) – 匹配方括号中出现的任何字符。可以使用不同类型的字符(字母数字字符):数字、字母、其他特殊字符等。

您需要仔细选择使用哪个通配符来匹配正确的文件名:也可以将所有通配符组合在一个操作中,如下面的示例中所述。

如何在 Linux 中使用通配符匹配文件名

出于本文的目的,我们将使用以下文件来演示每个示例。

createbackup.sh  list.sh  lspace.sh        speaker.sh
listopen.sh      lost.sh  rename-files.sh  topprocs.sh

1. 此命令匹配名称以 l(前缀)开头并以出现一个或多个任意字符结尾的所有文件。

ls -l l*	

2. 此示例展示了 * 的另一种用法,用于复制以 users-0 为前缀并以出现一个或多个任意字符结尾的所有文件名。

mkdir -p users-info
ls users-0*
mv -v users-0* users-info/	# Option -v flag enables verbose output

3. 以下命令匹配名称以 l 开头、后跟任何单个字符并以 st.sh 结尾(这是后缀)的所有文件)。

ls l?st.sh	

4. 下面的命令匹配名称以 l 开头、后跟方括号中的任意字符但以 st.sh 结尾的所有文件。

ls l[abdcio]st.sh 

如何在 Linux 中组合通配符来匹配文件名

您可以组合通配符来构建复杂的文件名匹配条件,如以下示例中所述。

5. 此命令将匹配以任意两个字符为前缀、后跟 st 但以一次或多次出现的任意字符结尾的所有文件名。

ls
ls ??st*

6. 此示例匹配以任何这些字符 [clst] 开头并以一次或多次出现的任意字符结尾的文件名。

ls
ls [clst]*

7. 在此示例中,仅以这些字符 [clst] 开头的文件名,后跟其中一个 [io],然后是任何单个字符字符,后跟 t,最后,将列出任意字符的一次或多次出现。

ls
ls [clst][io]?t*

8. 此处,以一次或多次出现的任意字符为前缀、后跟字母 tar 并以一次或多次出现的任意字符结尾的文件名将被删除。

ls
rm *tar*
ls

如何在Linux中匹配字符集

9. 现在让我们看看如何指定一组字符。考虑下面包含系统用户信息的文件名。

ls

users-111.list  users-1AA.list  users-22A.list  users-2aB.txt   users-2ba.txt
users-111.txt   users-1AA.txt   users-22A.txt   users-2AB.txt   users-2bA.txt
users-11A.txt   users-1AB.list  users-2aA.txt   users-2ba.list
users-12A.txt   users-1AB.txt   users-2AB.list  users-2bA.list

此命令将匹配名称以 users-i 开头,后跟数字、小写字母或数字,然后是数字并以出现一个或多个任意字符结尾的所有文件。

ls users-[0-9][a-z0-9][0-9]*

下一个命令匹配以 users-i 开头的文件名,后跟一个数字、一个小写或大写字母或数字,然后是一个数字,并以出现一个或多个任意字符结尾。

ls users-[0-9][a-zA-Z0-9][0-9]*

下面的命令将匹配所有以 users-i 开头的文件名,后跟一个数字、一个小写或大写字母或数字,然后是一个小写或大写字母,并以一次或多次出现结尾任何字符。

ls users-[0-9][a-zA-Z0-9][a-zA-Z]*

如何在 Linux 中对一组字符取反

10. 您还可以使用 ! 符号对一组字符求反。以下命令列出以 users-i 开头的所有文件名,后跟一个数字、除数字之外的任何有效文件命名字符,然后是一个小写或大写字母,并以一次或多次出现的任何字符结尾特点。

ls users-[0-9][!0-9][a-zA-Z]*

目前为止就这样了!如果您已经尝试过上述示例,那么您现在应该很好地理解通配符如何在 Linux 中匹配文件名。

您可能还想阅读以下文章,其中显示了在 Linux 中使用通配符的示例:

  1. 如何将 Tar 文件提取到 Linux 中的特定或不同目录
  2. 删除目录中除一个或少数带扩展名的文件之外的所有文件的 3 种方法
  3. 在 Linux 中编写有效 Bash 脚本的 10 个有用技巧
  4. 如何使用 awk 和正则表达式过滤文件中的文本或字符串

如果您有任何要分享的内容或要提出的问题,请使用下面的评论表。