Doc*_*iki 7 regex linux shell rm
我正在使用Linux并打算使用shell删除一些文件.
我的文件夹中有一些文件,有些文件名包含"好"字样,有些则没有.例如:
ssgood.wmv
ssbad.wmv
goodboy.wmv
cuteboy.wmv
Run Code Online (Sandbox Code Playgroud)
我想删除名称中不包含"good"的文件,因此剩下的文件是:
ssgood.wmv
goodboy.wmv
Run Code Online (Sandbox Code Playgroud)
如何rm
在shell 中使用?我试着用
rm -f *[!good].*
Run Code Online (Sandbox Code Playgroud)
但它不起作用.
非常感谢!
Edo*_*odo 17
这个命令应该做你需要的:
ls -1 | grep -v 'good' | xargs rm -f
Run Code Online (Sandbox Code Playgroud)
它可能比其他命令运行得更快,因为它不涉及使用正则表达式(这很慢,对于这种简单的操作是不必要的).
使用bash,您可以通过shell选项获得"负面"匹配extglob
:
shopt -s extglob
rm !(*good*)
Run Code Online (Sandbox Code Playgroud)
您可以find
与-not
运算符一起使用:
find . -not -iname "*good*" -a -not -name "." -exec rm {} \;
Run Code Online (Sandbox Code Playgroud)
我曾经-exec
打电话rm
给那里,但我想知道它是否 ,请参见下文。find
有内置的删除操作
但对此要非常小心。请注意,在上面我必须-a -not -name "."
在其中添加一个子句,因为否则它会匹配.
当前目录。所以我会-print
在投入之前进行彻底的测试-exec rm {} \;
!
更新:是的,我从未使用过它,但确实有一个-delete
动作。所以:
find . -not -iname "*good*" -a -not -name "." -delete
Run Code Online (Sandbox Code Playgroud)
再次强调,要小心并仔细检查您匹配的内容是否超出了您首先想要匹配的内容。