我正在使用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
再次,小心,仔细检查,你不是比你想匹配第一。