Linux Bash通配符介绍


Bash通配符是使用通配符字符匹配多个文件名或路径的过程。Bash提供了一些可用于通配符的特殊字符,例如*,?和[]。

*字符是一个通配符,可以匹配文件名或路径中的零个或多个字符。例如,命令ls *将列出当前目录中的所有文件,而命令ls *.txt将列出当前目录中所有扩展名为“.txt”的文件。

?字符类似于*字符,但它只匹配单个字符。例如,命令ls ?.txt将匹配诸如“a.txt”或“b.txt”之类的文件名,但不匹配“abc.txt”。

[]字符用于指定字符类,该字符类可用于匹配作为该类成员的任何单个字符。例如,命令ls [abc]*.txt将匹配诸如“a.txt”、“b.txt”或“c.txt”之类的文件名,但不匹配“d.txt”。

匹配任何字符串

在Bash中,通配符*可用于匹配任何字符串。*字符是一个特殊字符,用于匹配文件名或路径中任意数量的字符(包括零个字符)。

例如,命令ls *将列出当前目录中的所有文件,而不管其名称如何。命令ls *file*将列出当前目录中名称中任何位置包含字符串“file”的所有文件。

你也可以使用*字符来匹配具有特定扩展名的任何文件,例如ls *.txt将匹配当前目录中所有扩展名为.txt的文件。

需要注意的是,Bash的通配符只适用于文件系统中的文件,而不适用于目录或命令输出。你可以使用find或grep等其他命令来匹配文件或命令输出中的字符串。

匹配单个字符

在Bash中,通配符?可用于匹配单个字符。?字符类似于*字符,但它只匹配单个字符。当你需要匹配包含单个未知字符的特定模式时,这很有用。

例如,命令ls file?.txt将匹配诸如“filea.txt”或“fileb.txt”之类的文件名,但不匹配“fileabc.txt”或“file.txt”。如果你想匹配所有以“file”开头并以“.txt”结尾但在中间还有一个字母的文件,这将非常有用。

你还可以将?字符与其他通配符字符结合使用。例如,命令ls file?*将匹配诸如“filea.txt”或“fileabcd”或“fileabc”之类的文件名。

可以使用[]匹配特定字符集。例如,ls file[abc]*.txt将匹配“filea.txt”、“fileb.txt”、“filec.txt”,但不匹配“filed.txt”。

匹配字符范围

在Bash中,可以使用方括号[]指定字符范围,称为字符类,该字符类可用于匹配作为该类成员的任何单个字符。

例如,命令ls file[a-z].txt将匹配诸如“filea.txt”或“fileb.txt”或“filec.txt”到“filez.txt”之类的文件名,但不匹配“fileA.txt”或“file1.txt”。

你还可以使用方括号内的感叹号!来否定该类,以匹配该类中不存在的任何字符。例如,ls file[!a-z].txt将匹配诸如“fileA.txt”或“file1.txt”之类的文件名,但不匹配“filea.txt”或“fileb.txt”。

你还可以指定多个范围,例如[a-zA-Z]将匹配任何大小写字母字符。这对于匹配文件名中特定模式的多个变体非常有用。

需要注意的是,字符范围区分大小写,通配符将根据范围中的字符相应地匹配文件名。

隐藏文件

在包括Linux和macOS在内的Unix类系统中,以点.开头的文件和目录被认为是隐藏文件。使用ls等命令或在文件浏览器中查看目录内容时,通常不会默认显示这些文件和目录。

要在终端中显示隐藏文件和目录,可以使用ls命令的-a或--all选项。例如,命令ls -a将列出当前目录中的所有文件和目录,包括隐藏文件。

或者,可以使用ls -A显示所有文件和目录,包括隐藏文件,但忽略"."和".."文件,它们分别被认为是当前目录和父目录。

你还可以使用ls -la显示所有文件和目录,包括以详细格式显示隐藏文件的权限、所有者和时间戳。

也可以使用bash中的通配符字符匹配隐藏文件。例如,命令ls .*将匹配当前目录中的所有隐藏文件和目录。

总结

总之,Bash提供了一些特殊字符,例如*、?和[],这些字符可用于通配符,即使用通配符匹配多个文件名或路径的过程。*字符可以匹配任何字符串,?字符匹配单个字符,[]字符允许你指定称为字符类的字符范围。

Linux和macOS中的隐藏文件和目录是以点.开头的文件和目录,通常在使用ls等命令或在文件浏览器中查看目录内容时不会默认显示。要显示隐藏文件和目录,可以使用ls命令的-a或-A选项。

更新于:2023年1月24日

1K+ 浏览量

开启你的职业生涯

完成课程获得认证

开始学习
广告
© . All rights reserved.