使用通配符排除具有特定后缀的文件
我在bash中试用通配符,并尝试列出以“xyz”开头但不以“.TXT”结尾但获得不正确结果的所有文件。使用通配符排除具有特定后缀的文件
这里是我试过的命令:
$ ls -l xyz*[!\.TXT]
它不上市与名称“某某”和“xyzTXT”我有我的目录中的文件。但是,它列出了“xyz1”,“xyz123”。
看起来好像在“xyz *”之后加上[!\.TXT]
使得shell查找以“xyz”开头并且至少有一个字符的东西。
任何想法为什么会发生以及如何纠正此命令?我知道这可以通过其他命令来实现,但我特别想知道它为什么会失败,以及是否可以使用通配符。
我不认为这是可行的,只有通配符。
您的命令无法正常工作,因为这意味着:
比赛的一切,已其次是无论你想xyz
,它不能与序贯字符结尾:\
,.
,T
和X
。第二个T
不会像你想象的[]
那样被视为字符家族而不是字符串。
只要在通配符中没有特殊含义,您不需要'转义'.
。
至少,这是我对通配符的了解。
这些命令会做你想要
shopt -s extglob
ls -l xyz!(*.TXT)
shopt -u extglob
之所以你的命令不起作用,是东阳XYZ *什么[!\ TXT]这相当于XYZ * [!\ TX]手段xyz后跟任何字符序列(*),最后是集合{!,\,。,T,X}中的一个字符,因此匹配'xyzwhateveryouwant!' 'xyzwhateveryouwant'xyzwhateveryouwant'。 “xyzwhateveryouwantT“xyzwhateveryouwantX”
编辑:!这里whateveryouwant不包含任何的\ TX
是的,这种方法很有用,并且非常感谢这个解决方案,但是有任何想法为什么我尝试的命令对于“xyz”和“xyzTXT”文件不起作用? – 2012-07-11 16:37:19
你的命令匹配所有以xyz开始并以!\结尾的文件。TX – 2012-07-11 18:41:55
我用命令创建了两个文件:touch xyz!并触摸xyz。第一个以!结尾!被列出但不是以第二个结尾。 (点),我想!是为否定,但为什么它打印文件xyz!仍然是一个谜。 – 2012-07-11 20:22:31
我想这是有道理的。谢谢。 – 2012-07-11 17:01:37
@RameshSamane,做一些测试,例如,名为'xyzwhateverTXTyouwant','xyzwhateveryouwant.'和'xyzwhateveryouwantX'的文件。你的方法将为第一个工作,但会失败的另外两个。 – Zagorax 2012-07-11 17:04:02
是的,你是对的。我证实了它。 – 2012-07-11 20:32:48