Linux上Bash Globbing的介绍
Bash Globbing是使用通配符来匹配多个文件名或路径的过程。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的globbing只对文件系统中的文件起作用,而不是对目录或命令输出。你可以使用其他命令,比如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]
将匹配任何大写或小写字母的字符。这对于匹配文件名中一个特定模式的多种变化很有用。
值得一提的是,字符的范围是区分大小写的,globbing会根据范围内的字符相应地匹配文件名。
隐藏的文件
在基于Unix的系统中,包括Linux和macOS,以点.开头的文件和目录被视为隐藏文件。在使用ls等命令或在文件浏览器中查看一个目录的内容时,这些文件和目录通常默认不显示。
要在终端显示隐藏的文件和目录,你可以在ls命令中使用-a或-all选项。例如,命令ls -a将列出当前目录下的所有文件和目录,包括隐藏的文件和目录。
另外,你可以使用ls -A来显示所有的文件和目录,也包括隐藏的文件,但忽略”. “和”. “文件,它们分别被认为是当前和父目录。
你也可以使用ls -la来显示文件和目录,包括隐藏的文件,如权限、所有者和时间戳的详细格式。
隐藏文件也可以用bash中的通配符来匹配。例如,命令ls .*
将匹配当前目录下的所有隐藏文件和目录。
结论
总之, Bash提供了几个特殊的字符, 如*
, ?
, 和[]
, 可以用于globbing, 也就是使用通配符来匹配多个文件名或路径的过程.*
字符可以匹配任何字符串,?
字符匹配单个字符,而[]
字符允许你指定一个字符范围,称为字符类。
在Linux和macOS中,隐藏的文件和目录是以点开头的文件和目录。在使用ls等命令或在文件浏览器中查看目录内容时,通常默认不显示。要显示隐藏的文件和目录,你可以使用ls命令中的-a或-A选项。