如何在Shell模式(通配符)中使用逻辑AND/OR/NOT?

超级欧派课程 2024-03-07 03:35:19

"通配符"是一种简单的模式,用于匹配文件名或字符串。虽然功能相对有限,但如果您需要更强大的功能,有几种选项可供选择。

如果您想操作与模式A或模式B匹配的所有文件,只需将它们同时放在同一条命令行中:

rm -- *.bak *.old

如果您希望在模式的一部分中使用逻辑OR(大于单个字符的情况,对于单个字符,方括号字符类就足够了),在Bash中,您可以使用BraceExpansion:

rm -- *.{bak,old}

如果您需要更通用/更强大的功能,在KornShell或BASH中,您可以使用扩展通配符。在Bash中,您需要设置extglob选项。可以使用以下命令检查该选项:

shopt extglob

并通过以下命令进行设置:

shopt -s extglob

让我们先来个热身,将所有以"foo"开头且不以".d"结尾的文件移动到目录"foo_thursday.d"中:

mv foo!(*.d) foo_thursday.d

下面是一个更复杂的例子——删除所有包含"Pink_Floyd"且不包含"The_Final_Cut"的文件:

rm !(!(*Pink_Floyd*)|*The_Final_Cut*)

顺便提一下:这些模式也可以在KornShell中使用。在那里,它们无需启用,因为它们是默认的模式。

如果您觉得文章内容对你有一点帮助可以关注我,我在头条平台会持续分享更多实用的shell技巧和最佳实践,如果想系统的快速学习shell的各种高阶用法和生产环境避坑指南可以看看《shell脚本编程最佳实践》专栏,专栏里有更多的实用小技巧和脚本代码分享。

0 阅读:0

超级欧派课程

简介:感谢大家的关注