在我们开始文件通配之前,让我们了解什么是通配符模式,这些模式包含像“?”、“*”这样的字符串
文件通配是识别这些模式并完成文件路径扩展工作的操作。
请参阅下面的示例以获得清晰的理解,
如果你观察上图,我创建了几个起始字符为 HELLO 和 hello 的目录,然后尝试删除这些目录。
当我使用rm -rf hello* 时,它删除了目录 hello1、hello2、hello3,在 ‘hello’ 之后使用的 ‘*’ 符号将第一个字符识别为 ‘hello’ 然后零次或多次出现任何其他字符。
使用其它字符的例子:
1)星号 (*)
*用于匹配任意数量的字符(零个或多个),了解更多可以参考上面的例子。
2)问号(?)
?用于精确匹配一个字符。
在上图中,您可以观察到“?”可以精确匹配一个字符并在行尾使用。
所以使用“你好?”将匹配所有起始字符为 ‘hello’ 的文件或目录,并且它会再识别一个字符。
3)方括号 []
方括号用于匹配[]里面的字符,参考下图,
[]可以用来匹配精确的字符或者你也可以指定一个范围,就像上面的例子,使用 ‘hello[1-5]’ 将显示所有以 ‘hello’ 开头的文件和目录,然后下一个字符可以是从 1 到 5 的数字。
4)感叹号(!)
!用于从方括号内指定的列表中排除字符。
例如:
ls hello[!3]
It will display the directories starting with hello, ending with any character but not 3
5)命名字符类 ([[:named:]])
它用于打印命名值。 它们的解释取决于LC_CTYPE 语言环境;其中一些列在下面。
- ‘[:alnum:]’ :打印所有具有字母和数字的文件。小写和大写都被考虑。
- ‘[:alpha:]’ :打印所有只有字母的文件。小写和大写都被考虑。
- ‘ [:digit:]’ :打印所有具有数字的文件。
- ‘[:lower:]’:打印所有具有小写字母的文件。
- “[:PUNCT:]”:打印所有这些文件有字符。会搜索! ” # $ % & ‘ ( ) * + , – . / : ; < = > ? @ [ \ ] ^ _ ` { | }~。
- ‘ [:space:]’:打印所有具有空格字符的文件。
- ‘[:upper:]’:打印所有具有小写字母的文件。
注意:它们可以与星号 (*) 、问号 (?) 或方括号 ([]) 一起使用以生成有用的输出。
例如:
ls [[:alpha:]]* : Will display the directories starting with a alphabet (either in lower or uppercase) and ending
with any characters.
ls *[[:alnum:]]*.* : Will display the files (of any type) containing a alphabet or a digit but may start
or end with any length of characters.
ls *[[:digit:]] : Will display the directories which may start with any length of characters but ending with a digit.
ls ?[[:lower:]] : Will display the directories starting with exactly one character and ending with a lowercase
character.
ls *[[:upper:]]* : Will display the directories containing a alphabet or digit which may start or end with any
length of characters.
注意: *, ?可以与任何命名类一起使用。