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


18

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

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

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

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

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

我已经尝试过使用bash和zsh,但我认为它们对于这样的基本任务没有太大区别吗?


“ ... rm FOO1 [3-5]希望删除所有以FOO1开头的文件”这是没有意义的,在这里肯定不是这种情况。
伊格纳西奥·巴斯克斯

@Ignacio是的-我希望看到字符集具有该整理顺序!
kmarsh 2010年

Answers:



13

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

find . -type f -regex '...' -delete

但是选择的答案是该问题的最简单答案。


但是,选择的答案仅适用于遵循命名约定的文件。多亏您的回答,我才可以删除目录中的所有目标文件。(就我而言,我只是一起去了find . -name "*.o" -delete,它就像一种魅力)
John Hamilton

6

ls | grep regex | xargs rm


6
您应该使用find -regex ... -print0 | xargs -0 ...它,否则对于带空格的文件名将失败。
暂停,直到另行通知。

1
当然,如果您要使用,find那么最好也可以使用-exec
伊格纳西奥·巴斯克斯

在我的情况下,文件有空格,更改定界符可解决空格问题:grep regex | xargs --delimiter ='\
n'rm


@ evilsoup,+ 1用于添加该警告,但是,谁在文件名中插入了新行?
Iulian Onofrei
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.