这是我的当前目录,其中包含以下文件夹:
rpea-vd1-430: ls
rev10 rev11 rev12 rev2 rev3 rev4 rev5 rev6 rev7 rev8 rev9 Synthesis.config Synthesis.html
我曾使用follwoing linux命令删除文件夹。
rm -rf rev[1-11]
但是如果我给我命令会失败
rm -rf rev[1-9]
因为它删除了从rev1到rev9命名的目录;为什么不考虑两位数?
预期产量:
rev11 Synthesis.config Synthesis.html
为什么
rm -rf rev[1-9]
不考虑两位数?
为什么要这样 您只指定了一位数字。方括号表达式[..]
正好匹配一个字符,该字符必须是方括号内列出的字符之一。因此,rev[1-9]
匹配格式为的文件名revN
,其中N
是一些数字(除外0
)。类似地,rev[1-11]
精确匹配rev1
,因为这1
是括号内指定的唯一字符,即使多次指定也是如此。与rev[1]
或相同rev1
。同样,rev[1-12]
将与相同rev[12]
。
您可以使用rev[0-9]*
匹配所有以rev
,数字,然后是任何东西开头的文件名,或者在Bash和ksh中使用扩展的globrev+([0-9])
。+(...)
与(...)+
正则表达式类似,该子表达式与括号内的模式至少匹配一次重复。
括号扩展{a..b}
,另一方面,会产生字符串,不匹配文件名,所以你可以使用rev{1..12}
生成rev1
,rev2
...... rev12
。这不会考虑文件是否存在,因此也会生成rev1
,在您的示例中不存在。
通过编辑判断,您要匹配(和rm
)所有匹配的文件rev*
,除了rev11
?最简单的方法可能是临时重命名异常(假设arev11
不存在):
$ mv rev11 arev11
$ rm -r rev*
$ mv arev11 rev11
您可以使用大括号扩展...
$ rm -r rev{{1..10},12}
(如果将上限设置得太高,则会出现关于不存在名称的错误。)
创建一个与11以外的数字匹配的glob有点棘手,可能是这样的,但是最好先仔细检查一下:
$ echo rm -r rev[0-9] rev1[02-9] rev[2-9][0-9]
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句