根据模式删除文件

根据模式删除文件

这个问题可能已在某处得到解决,但无法找到满足我的要求的命令。

因此,基本上假设有 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>

相关内容