📜  Linux 中的文件通配

📅  最后修改于: 2021-10-23 07:42:29             🧑  作者: Mango

在我们开始文件通配之前,让我们了解什么是通配符模式,这些模式包含像“?”、“*”这样字符串

文件通配是识别这些模式并完成文件路径扩展工作的操作。

请参阅下面的示例以获得清晰的理解,

‘*’ 的路径扩展

如果你观察上图,我创建了几个起始字符为 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.

注意: *, ?可以与任何命名类一起使用。