如何使用正则表达式在命令行上删除文件?

Jac*_*ack 20 linux bash zsh shell regex

假设我有 20 个名为 FOOXX 的文件,其中 XX 是文件的编号,例如 01、02 等。

目前,如果我想删除小于 10 的所有文件,这很容易,我只需使用通配符,例如 rm FOO0*

但是,如果我想删除某个范围内的特定文件,例如 13-15,这将变得更加困难。

rm FPP[13-15] 不起作用,并询问我是否要删除所有文件。同样 rm FOO1[3-5] 希望删除所有以 FOO1 开头的文件

那么,删除这样的文件范围的最佳方法是什么?

我已经尝试过 bash 和 zsh,我认为它们对于这样一个基本任务并没有太大区别?

Mik*_*ick 32

在 bash 中,您可以使用:

rm FOO1{3..5}

或者

rm FOO1{3,4,5}

删除 FOO13、FOO14 和 FOO15。

此处记录Bash 扩展大括号。

  • 甚至`rm FOO{13..15}`。 (2认同)

小智 13

对于未来的读者,该find命令还可以删除文件。我解决了这个类似的问题:

find . -type f -regex '...' -delete
Run Code Online (Sandbox Code Playgroud)

但所选择的答案是对这个问题最简单的回答。


gog*_*iel 6

ls | grep 正则表达式 | xargs rm

  • 你应该使用`find -regex ... -print0 | xargs -0 ...` 为此,否则对于带空格的文件名会失败。 (6认同)