bash 通配符可以指定负匹配吗?

Ras*_*att 8 bash wildcards

是否bash可以使用通配符来指定“当前目录中的所有文件,除了[与特定(通配符)模式匹配的文件]”?例如,“所有不匹配 *~ 的文件”

或者更一般地说,是否可以使用第二个过滤或否定规范来限定通配符文件规范?

bja*_*sen 8

当然。假设您希望所有文件的名称中都包含字符串“foo”,但不希望所有文件也包含“bar”。所以你要

foo1
foo2
Run Code Online (Sandbox Code Playgroud)

但你不想

 foobar1
Run Code Online (Sandbox Code Playgroud)

您可以使用简单的通配符来做到这一点,如下所示:

for f in foo!(bar)*; echo $f; done
Run Code Online (Sandbox Code Playgroud)

或者

ls foo[^bar]*
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参见此处:http://www.tldp.org/LDP/abs/html/globbingref.html请注意,这两种方法都有其陷阱。您可能最好使用find.

  • 注意 `[^bar]` 确实匹配单个字符,不包括 b、a 和 r。 (5认同)