我正在使用Linux并打算使用shell删除一些文件。
我的文件夹中有一些文件,有些文件名包含“好”字样,有些则没有。 例如:
ssgood.wmv
ssbad.wmv
goodboy.wmv
cuteboy.wmv
我想删除名称中不包含“good”的文件,因此其余文件为:
ssgood.wmv
goodboy.wmv
如何在shell中使用rm
?我尝试使用
rm -f *[!good].*
但它不起作用。
非常感谢!
答案 0 :(得分:17)
此命令应该可以满足您的需求:
ls -1 | grep -v 'good' | xargs rm -f
它可能比其他命令运行得更快,因为它不涉及使用正则表达式(这很慢,对于这样一个简单的操作是不必要的)。
答案 1 :(得分:6)
使用bash,您可以通过extglob
shell选项获取"negative" matching:
shopt -s extglob
rm !(*good*)
答案 2 :(得分:4)
您可以将find
与-not
运算符一起使用:
find . -not -iname "*good*" -a -not -name "." -exec rm {} \;
我已使用-exec
在那里调用rm
,但我想知道 它,见下文。find
是否有内置的删除操作
但 非常 小心。请注意,在上面我必须放入-a -not -name "."
子句,因为否则它与当前目录匹配.
。所以在放入-print
位之前,我会先用-exec rm {} \;
进行测试!
更新:是的,我从未使用过它,但确实有-delete
个动作。所以:
find . -not -iname "*good*" -a -not -name "." -delete
再一次,要小心并仔细检查一下你的匹配程度是否超出你想要匹配的次数。