1

我正在运行一个导致大量文件的模拟。这些文件的命名如下: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:希望这个问题清晰、客观、具体。请考虑在删除/标记此问题之前提供具体反馈。

马杜卡尔

4

3 回答 3

0

您想要 bash 的扩展通配符,详细信息如下:http ://www.linuxjournal.com/content/bash-extended-globbing

关键是

shopt -s extglob

在此之后,您可以使用正则表达式进行通配。在清除所有内容之前,请谨慎使用并使用 ls 进行验证。

于 2013-03-01T06:20:32.197 回答
0

我认为您可以通过以下方式实现这一目标:

rm a-*[1-4,6-9]00.dat

关于您的尝试:rm a-*{100,200,300,400,600,700,800,900}.dat,我不明白为什么您需要为前缀的每个值运行它。如果您按字面意思输入它应该可以正常工作 -*就地,它相当于我上面的建议(只是长一点)。

附带说明一下,如果您确实需要执行rm多次,可以通过for在脚本中使用循环来自动执行此操作。

于 2013-03-01T06:29:38.160 回答
0
find -regextype posix-basic -regex './a-[0-9]\{3\}00.dat' -not -regex './a-*[0,5]\{1\}00.dat' - exec rm -i {} \;

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

于 2013-03-01T07:00:55.467 回答