2

我试图find在我的/var/log目录中做一个简单的查找所有未压缩的系统日志文件。到目前为止,我所拥有的是正则表达式:

syslog(\.[0-9]*)?$

因此,这将找到syslogsyslog.1syslog.999等并跳过 gzip 压缩的日志,例如syslog.1.gz或任何与上述系统日志的模式不匹配的内容。我也在做一个非常基本的 find 命令:

find /var/log -regextype posix-extended -regex "syslog(\\.[0-9]*)?$"

但是,我总是得到一个空的结果!现在,我认为我编写的正则表达式与 POSIX 扩展兼容,但似乎并非如此。以下是我运行的命令的变体,但无济于事:

find /var/log -regextype posix-extended -regex "syslog(\\.[0-9]*)?$"

sudo find /var/log -regextype posix-extended -regex "syslog(\\.[0-9]*)?$"

find /var/log -regextype posix-extended -regex "syslog"

find /var/log -regextype posix-extended -regex "(syslog)"

以下通过列出目录中的所有文件按预期工作,但是,所以我知道我的命令格式是正确的。

find /var/log -regextype posix-extended -regex ".*"

我究竟做错了什么?

4

1 回答 1

3

您提供的正则表达式模式需要匹配整个路径。这意味着您不需要在开头和结尾处用^and锚定它$,它已经隐式地锚定在两端。但是,如果您的模式的其余部分应该与开头以外的某个地方匹配,则您确实需要提供前导或类似的东西(请记住,路径总是包含一个目录,即使它是..*find.

find . -regextype posix-extended -regex '.*syslog(\.[0-9]*)?'

为我工作。

于 2016-08-13T02:26:08.207 回答