我正在使用 Linux 并打算使用 shell 删除一些文件。
我的文件夹中有一些文件,一些文件名包含“好”这个词,而另一些则没有。例如:
ssgood.wmv
ssbad.wmv
goodboy.wmv
cuteboy.wmv
我想删除名称中不包含“good”的文件,所以剩下的文件是:
ssgood.wmv
goodboy.wmv
如何rm
在 shell 中使用?我尝试使用
rm -f *[!good].*
但它不起作用。
非常感谢!
这个命令应该做你需要的:
ls -1 | grep -v 'good' | xargs rm -f
它可能会比其他命令运行得更快,因为它不涉及使用正则表达式(这很慢,对于这样一个简单的操作来说是不必要的)。
使用 bash,您可以通过shell 选项获得“否定”匹配:extglob
shopt -s extglob
rm !(*good*)
您可以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
同样,要小心并仔细检查您匹配的次数没有超过您想要匹配的次数。