我有几个具有相同基本文件名的文件。我只想删除一个
foo.org #keep
foo.tex #delete
foo.fls #delete
foo.bib #delete
etc
如果我不需要保留一个,那么我知道可以使用rm foo.*
。
TLDP证明^
可以取消匹配。通过反复试验,我发现
rm foo.*[^org]
可以满足我的需求,但我不太了解语法。
另外,虽然我的用例不受限制,但我认为此模式也忽略了foo.o
和foo.or
。这一模式如何工作的,以及什么将一个水珠忽略只有 foo.org
样子?
您正在使用
—
马斯卡洛先生2014年
Regular Expression
。您应该小心分组字符。通过使用括号您指定一个字符类的含义,你会删除了与字母的扩展名的文件o
,r
或g
以任何顺序。使用括号创建一个组并保留字符顺序。
@ jbarker2160-并不是真正的正则表达式,通常称为glob(或文件名模式),它或多或少是正则表达式的子集-有关详细信息,请参见bash手册页的模式匹配部分。他的模式
—
约翰尼
foo.*[^org]
将匹配任何foo.
以点后一个或多个字符开头的文件名,其中最后一个字符不是o,r或g。因此它将匹配foo.orb
,但不匹配foo.org
or foo.or
或foo.o
。GlennJackman的答案显示了如何启用扩展模式匹配功能来取消匹配。
rm foo.*[^org]
删除所有文件,这最后一个字符既不是o
,r
或者g
,所以foo.foo
也不会觉得要匹配。