rm -rf无法使用Linux使用数字?

萨尔玛

这是我的当前目录,其中包含以下文件夹:

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}生成rev1rev2...... 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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章