当名称不包含某些单词时删除文件
我正在使用 Linux 并打算使用 shell 删除一些文件。
我的文件夹中有一些文件,一些文件名包含“好”一词,另一些则不包含。 例如:
ssgood.wmv
ssbad.wmv
goodboy.wmv
cuteboy.wmv
我想删除名称中不包含“good”的文件,因此剩余的文件是:
ssgood.wmv
goodboy.wmv
如何在 shell 中使用 rm 来做到这一点?我尝试使用
rm -f *[!good].*
但它不起作用。
多谢!
I am using Linux and intend to remove some files using shell.
I have some files in my folder, some filenames contain the word "good", others don't.
For example:
ssgood.wmv
ssbad.wmv
goodboy.wmv
cuteboy.wmv
I want to remove the files that does NOT contain "good" in the name, so the remaining files are:
ssgood.wmv
goodboy.wmv
How to do that using rm
in shell? I try to use
rm -f *[!good].*
but it doesn't work.
Thanks a lot!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
该命令应该满足您的需要:
它可能会比其他命令运行得更快,因为它不涉及使用正则表达式(这很慢,对于这样一个简单的操作来说是不必要的)。
This command should do what you you need:
It will probably run faster than other commands, since it does not involve the use of a regex (which is slow, and unnecessary for such a simple operation).
使用 bash,您可以通过
extglob 获得“负”匹配外壳选项:
With bash, you can get "negative" matching via the
extglob
shell option:您可以将
find
与-not
运算符:我已经使用
-exec
在那里调用rm
,但是我想知道确实如此,请参阅下面。find
是否有内置删除操作但非常对此要小心。请注意,在上面我必须放入
-a -not -name "."
子句,因为否则它会匹配当前目录.
。因此,在放入-exec rm {} \;
位之前,我会使用-print
进行彻底测试!更新:是的,我从未使用过它,但确实有一个
-delete
操作。所以:再次强调,要小心并仔细检查您匹配的内容是否超出了您想要匹配的内容。
You can use
find
with the-not
operator:I've used
-exec
to callrm
there, butI wonder ifit does, see below.find
has a built-in delete actionBut very careful with that. Note in the above I've had to put an
-a -not -name "."
clause in, because otherwise it matched.
, the current directory. So I'd test thoroughly with-print
before putting in the-exec rm {} \;
bit!Update: Yup, I've never used it, but there is indeed a
-delete
action. So:Again, be careful and double-check you're not matching more than you want to match first.