在 Linux 中使用通配符匹配文件名的 10 个实例
通配符(也称为元字符)是代表其他字符的符号或特殊字符。您可以将其与任何命令(例如 ls 命令或rm 命令)一起使用,以逐个列出或删除符合给定条件的文件。
这些通配符由 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]
,然后是任意单个字符,然后是 a ,最后是任意字符的一个或多个出现的文件名。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 中使用通配符的示例:
- 如何在 Linux 中将 Tar 文件提取到特定或不同的目录
- 删除目录中除一个或几个带扩展名的文件之外的所有文件的 3 种方法
- 在 Linux 中编写有效 Bash 脚本的 10 个有用技巧
- 如何使用 Awk 和正则表达式过滤文件中的文本或字符串
如果您有任何内容想要分享或者有问题想要询问,请使用下面的评论表。