ファイル名でタイムスタンプを見つけるための正規表現は機能しません。

ファイル名でタイムスタンプを見つけるための正規表現は機能しません。

mailfilter、dovecot-indexなどを使用せずにユーザーのmaildirでメールファイルを検索したいと思います。

すべてのメールファイルには、ファイル名にUnixタイムスタンプがあります。これが最も簡単な方法だと思います。

私はこの正規表現を使用しました。.*\/\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で使用できない理由について説明します。

おすすめ記事