这个问题可能已在某处得到解决,但无法找到满足我的要求的命令。
因此,基本上假设有 51 个以 aaa.log 开头的文件 aaa.log.1 aaa.log.2 . aaa.log.4 aaa.log.40 aaa.log.41 . . aaa.log.50
现在,我打算删除aaa.log.40到aaa.log.50的文件。
如果我运行 rm -f aaa.log.4*,它将删除包括 aaa.log.4 在内的所有内容。我应该使用什么调整以便它只删除 aaa.log.40 到 50,但不删除 aaa.log.4?
答案1
Ubuntu 中的默认 shell 是bash
。在bash
(可能还有许多其他 shell)中,您可以像这样执行此操作:
rm -f aaa.log.{40..50}
扩展{40..50}
会扩展到 40 到 50 的数字范围,并自动导致单词的其余部分与每个扩展的数字重复。它不会验证文件名是否存在,因此可能会导致rm
给出不存在的文件的名称。但是,由于您显然无论如何都想使用强制选项,所以这不是问题。当您键入时,rm -f
它不会打印有关丢失文件的任何错误消息。
如果您不熟悉扩展,通常最好先测试echo
前面的命令。然后您可以看到参数扩展为:
echo rm -f aaa.log.{40..50}
答案2
除了@kasperd的回答之外,以下内容可能会有所帮助:如果数字不是连续的(例如20-30和50-60),则可以执行以下操作:
rm aaa.log.{2,3,5,6}[0-9]
这将删除所有以 2、3、5 或 6 结尾且后跟 0-9 范围内的任意数字的文件。
更新:@janos 指出这将删除 31-39 和 61-69,以及列出的其他文件。
答案3
如果您使用zsh
扩展的通配符,则可以使用rm aaa.<40-50>
。