当名称不包含某些单词时删除文件

我正在使用Linux,并打算使用shell删除一些文件。

我在我的文件夹中有一些文件,一些文件名包含单词“好”,有些则不。 例如:

ssgood.wmv ssbad.wmv goodboy.wmv cuteboy.wmv 

我想删除名称中不包含“good”的文件,所以剩下的文件是:

 ssgood.wmv goodboy.wmv 

如何在shell中使用rm ? 我尝试使用

 rm -f *[!good].* 

但它不起作用。

非常感谢!

这个命令应该做你需要的东西:

 ls -1 | grep -v 'good' | xargs rm -f 

它可能比其他命令运行得更快,因为它不涉及正则表达式的使用(对于这样一个简单的操作来说,这是很慢的,也是不必要的)。

用bash,你可以通过extglob shell选项获得“负面”匹配 :

 shopt -s extglob rm !(*good*) 

您可以使用-not运算符来find

 find . -not -iname "*good*" -a -not -name "." -exec rm {} \; 

我用-exec在那里调用了rm ,但是我想知道find是否有一个内置的delete操作 ,见下

但是非常小心。 注意在上面我必须把一个-a -not -name "." 子句,因为否则它匹配. ,当前目录。 所以我会在-exec rm {} \;之前用-print彻底测试-exec rm {} \; 位!

更新 :是的,我从来没有使用过,但确实有一个 – -delete行动。 所以:

 find . -not -iname "*good*" -a -not -name "." -delete 

再次,小心,仔细检查,你不是比你想匹配第一。