使用通配符删除以多位数为后缀的相似命名文件

Nav*_*avi 1 regular-expression wildcards

我有许多名称相似的文件,后缀为 1 到 500 的数字。我只想删除 1 到 250 的文件。有没有办法使用通配符来做到这一点。

文件是:stdout.1 到 stdout.500

我想将文件从 stdout.1 删除到 stdout.250。

谢谢

ilk*_*chu 8

在 Zsh 中,你可以只做rm stdout.<1-250>. <n-m>匹配表示从nm的十进制整数的文件名部分。(可能带有前导零,因此stdout.0099也会匹配。)

在 Bash 中,您可以使用大括号扩展:rm stdout.{1..250}. 尽管与 Zsh 的不同之<1-250>处在于大括号扩展生成字符串而不考虑现有文件,因此如果列表中间缺少文件,您可能会出错。在 的情况下rm,添加该-f选项将消除与 一样的这些错误-frm仅当您要求取消链接的任何文件在返回后仍然存在时才会抱怨。

如果您想避免生成不存在文件的名称,或者仅限于标准sh(即没有大括号扩展),那么您必须逐个字符地进行匹配。所以:

rm stdout.? stdout.??       #   1 to  99
rm stdout.1??               # 100 to 199
rm stdout.2[01234]?         # 200 to 249
rm stdout.250               # 250
Run Code Online (Sandbox Code Playgroud)

但是请注意,如果没有匹配的文件,则rm stdout.2[01234]?最终会删除一个名为(stdout.2[1234]?如果存在)的文件。