在文件名中查找时间戳的正则表达式不起作用

在文件名中查找时间戳的正则表达式不起作用

我想在用户 maildir 中找到邮件文件,而不需要 mailfilter、dovecot-index 等。

所有邮件文件的文件名中都有 unix 时间戳,我认为这是最简单的方法。

我使用了这个正则表达式:.*\/\d{10}\..*.它运作良好http://regexr.com/测试仪,但无法在查找命令字符串中工作。

完整命令字符串:find /var/lib/exim4/mail/markelov -regextype sed -regex '.*\/\d{10}\..*' -type f

括号转义 ( .*\/\d\{10\}\..*) 也不起作用。

字符串示例: 应该找到:

/var/lib/exim4/mail/markelov/Maildir/.Sent/cur/1444787116.M8092P4423.mail,S=7264,W=7377:2,S
/var/lib/exim4/mail/markelov/Maildir/.Sent/cur/1445824988.M900660P25060.mail,S=422,W=434:2,S
/var/lib/exim4/mail/markelov/Maildir/.Trash/cur/1441681017.M637660P29838.mail,S=38938:2,Sa
/var/lib/exim4/mail/markelov/Maildir/.Trash/cur/1441934431.M919612P29838.mail,S=1447:2,Sa

不应该找到:

/var/lib/exim4/mail/markelov/Maildir/.INBOX.zabbix.Alerts/maildirfolder
/var/lib/exim4/mail/markelov/Maildir/.INBOX.zabbix.Alerts/dovecot-uidlist
/var/lib/exim4/mail/markelov/Maildir/subscriptions
/var/lib/exim4/mail/markelov/Maildir/.INBOX.megaplan/dovecot.index

查找--版本

find (GNU findutils) 4.4.2
Copyright (C) 2007 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Eric B. Decker, James Youngman, and Kevin Dalley.
Built using GNU gnulib version e5573b1bad88bfabcda181b9e0125fb0c52b7d3b
Features enabled: D_TYPE O_NOFOLLOW(enabled) LEAF_OPTIMISATION FTS() CBO(level=0) 

答案1

问题是正\d则表达式无法理解,sed因此您应该使用数字字符类:[0-9]。此外,sed用于此用途的大括号需要前面有反斜杠。代替:

.*\/\d{10}\..*

尝试

.*\/[0-9]\{10\}\..*

如果您指定-regextype posix-egrep您将使用:

.*\/[0-9]{10}\..*

正则表达式有许多不同的版本。我建议您找到有关您用来查找正确的正则表达式语法的命令的文档。

来自 regxr.com 网站:

RegExr 使用浏览器的 RegExp 引擎进行匹配,其语法突出显示和文档反映了 JavaScript RegExp 标准。

这部分解释了为什么正则表达式不能与 find 一起使用。

相关内容