我正在运行模拟,导致大量文件。这些文件的名称如下:a-*000.dat, a-*100.dat.....a-*500.dat....a-*900.dat
,其中*是两位数。我想保留a- * 000和a- * 500,并删除其他所有内容。
我试过rm a-*{100,200,300,400,600,700,800,900}
并且它有效。但我必须为*的每个值运行它。你能否建议一个shell脚本,这样我就可以避免多次运行rm
。
MADHUKAR
答案 0 :(得分:0)
你想要bash的扩展globbing,详见:http://www.linuxjournal.com/content/bash-extended-globbing
关键是
shopt -s extglob
在此之后,您可以使用正则表达式进行通配。在消灭所有内容之前,请小心使用并与ls一起验证。
答案 1 :(得分:0)
我认为你可以通过以下方式实现这一目标:
rm a-*[1-4,6-9]00.dat
关于您的尝试:rm a-*{100,200,300,400,600,700,800,900}.dat
,我不明白为什么您需要为前缀的每个值运行它。如果你按字面意思输入它应该可以正常工作 - *
就位,这相当于我上面的建议(只有一点点)。
作为旁注,如果您确实需要多次执行rm
,则可以通过在脚本中使用for
循环来自动执行此操作。
答案 2 :(得分:0)
find -regextype posix-basic -regex './a-[0-9]\{3\}00.dat' -not -regex './a-*[0,5]\{1\}00.dat' - exec rm -i {} \;
看起来很丑,但在基本正则表达不够的情况下可以扩展。