用于删除一组文件的Shell脚本

时间:2013-03-01 06:18:07

标签: shell unix

我正在运行模拟,导致大量文件。这些文件的名称如下: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

PS:希望这个问题清晰,客观,具体。在删除/标记此问题之前,请考虑提供具体的反馈。

MADHUKAR

3 个答案:

答案 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 {} \;

看起来很丑,但在基本正则表达不够的情况下可以扩展。