파일 이름에서 타임스탬프를 찾는 정규식이 작동하지 않습니다.

파일 이름에서 타임스탬프를 찾는 정규식이 작동하지 않습니다.

mailfilter, dovecot-index 등을 사용하지 않고 사용자의 maildir에서 메일 파일을 찾고 싶습니다.

모든 메일 파일에는 파일 이름에 유닉스 타임스탬프가 있습니다. 이것이 가장 쉬운 방법이라고 생각합니다.

나는 이 정규식을 사용했습니다. .*\/\d{10}\..*.잘 작동했습니다.http://regexr.com/테스터이지만 find 명령 문자열에서는 작동하지 않습니다.

완전한 명령 문자열: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와 함께 사용할 수 없는 이유를 설명합니다.

관련 정보