bash扩展的glob-匹配不带前缀的文件


13

我正在尝试为fail2ban监狱匹配文件名-所以我只需要使用文件名遍历-而不是正则表达式或bash脚本。

我的/var/log/apache2目录包含以下文件:

example.com.error.log
db.example.com.error.log
app1.example.com.error.log
app2.example.com.error.log

我正在尝试创建一个glob来匹配以结尾的所有文件,.error.log 除了 db.example.error.log -这可能吗?

我已经尝试过了,!(db)*.error.log但这仍然匹配db.example.com.error.log。我猜的!()是没有字符匹配,从而允许*从文件名的开头进行匹配。

注意:appX添加新的日志文件时,我不需要扩展glob ,因此无法使用@()当前已知的非db文件名列表。

(背景:我想创建一个过滤器,禁止任何人在db.example.com 以外的任何域上请求任何phpMyAdmin URL )

Answers:


18

扩展的文件名浮动模式(受激活bashextglobshell选项支持,也受支持ksh93

!(db*).error.log

将忽略以开头的任何内容db

更加具体:

!(db.example.com).error.log

这将忽略当前目录中以完全开头的任何名称db.example.com

!(db.example.com)模式的作用类似于“特殊*”字符串,与字符串不匹配db.example.com


你的模式

!(db)*.error.log

排除以开头的任何名称db,但之后允许任何字符串,其中显然包括db

按照与上述相同的方式,!(db)行为“像*”,但与确切的字符串不匹配db,从而使我们具有**.error.log 可以说的模式(第一个*是“特殊的”)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.