2013-02-15 114 views
0

混合标准,我有以下文件的目录:需要帮助扩展通配符

foo.bar.1.txt 
foo.bar.2.txt 
foo.bar.1.out 
foo.bar.2.out 
bar.1.txt 
bar.2.txt 
bar.1.out 
bar.2.out 

我有两个目标:

小学:在脚本中,我想猫bar.2 .out(但不是foo.bar.2.out),但“bar”因情况而异。换句话说,我真的非常想要cat * .2.out,不包括foo.bar.2.out文件。

次要:了解更多关于扩展匹配如何工作。我知道我可以使用find和grep的一些组合来筛选我想要的文件。

回答

2

是的,扩展globbing应该这样做。

$ shopt -s extglob 
$ ls !(foo*).2.out 
bar.2.out 
+0

那么,工作,但我不知道为什么。 !(foo *)基本上是否作为通配符来排除任何以foo开头的内容?另外,因为在foo之后有一个*,为什么它不排除bar.2.out,因为foo在那里被使用了0次? – 2013-02-15 15:58:26

+0

请参见[man bash](http://linux.die.net/man/1/bash)中的模式匹配。 – choroba 2013-02-15 16:40:28