mtime 또는 ctime을 기준으로 메일을 보관/이동하는 것이 더 좋나요?

mtime 또는 ctime을 기준으로 메일을 보관/이동하는 것이 더 좋나요?

나는 발견된 메일을 보관하기 위해 Perl 스크립트를 사용하고 있습니다.여기

스크립트는 ctime을 사용하여 메일을 저장할 월 하위 폴더를 처리하고 결정합니다. 대부분의 경우 ctime = mtime이므로 메시지는 보내거나 받은 달을 기준으로 보관되므로 괜찮습니다.

하지만 때로는 스크립트를 실행하는 것이 좋지 않을 때도 있습니다.

예를 들어, 사용자가 메시지를 받은 편지함으로 다시 이동하거나 메시지가 백업에서 받은 편지함으로 복원되었다고 가정해 보겠습니다. 스크립트가 터치된 메시지를 처리하는 경우 메시지를 보내고 받은 시간이 아닌 터치된 달로 메시지를 이동합니다.

이메일을 처리하려면 mtime을 사용하는 것이 더 낫지 않을까요?

즉, 어떤 POSIX qw를 더 잘 사용해야 합니까?

답변1

저는 procmailmaildir과 Dovecotmaildir을 사용하고 있지만 구조가 꽤 표준화되어 있습니다.

날짜별로 보관하려는 경우 Date헤더에서 확인이 필요할 수 있습니다. 헤더 상단에서 찾은 첫 번째 날짜를 읽으면 꽤 정확할 것입니다. 내 메시지에는 제목과 제목 Delivery-Date:이라는 세 가지 필드를 사용할 수 있습니다 . 수신된 메시지의 경우 첫 번째 또는 첫 번째 헤더에 적절한 날짜가 표시됩니다. 보낸 메시지에는 메일 서버의 시간이 아닌 메시지를 생성한 시스템의 시간을 반영하는 헤더만 있을 수 있습니다. 헤더에 사용 가능한 날짜가 없는 메시지에 플래그를 지정할 수 있습니다.Received:Date:Delivery-Date:Received:Date:

ctime이는 일반적으로 메시지 날짜여야 하지만 경우에 따라 메시지를 이동하거나 복사하면 메시지의 새 복사본이 생성됩니다. 일반적으로 이러한 작업은 파일을 올바른 디렉터리에 다시 연결하여 수행됩니다. 편집: 이 스크립트는 파일의 첫 번째 날짜가 포함된 메시지 목록을 인쇄합니다. RFC 날짜 형식과 일치합니다. 정규 표현식이 최고가 아닐 수도 있습니다.

#!/usr/bin/perl

%months = ( 'Jan'=>'01', 'Feb'=>'02', 'Mar'=>'03', 'Apr'=>'04',
            'May'=>'05', 'Jun'=>'06', 'Jul'=>'07', 'Aug'=>'08',
            'Sep'=>'09', 'Oct'=>'10', 'Nov'=>'11', 'Dec'=>'12' );

foreach $filename (@ARGV) {
    open( MESSAGE, $filename);

    while (<MESSAGE>) {
        if ( m/[A-Z][a-z][a-z], ([1230][0-9]) ([A-Z][a-z][a-z]) ([12][0-9][0-9][0-9])/ ) {
            print "$3-$months{$2}-$1 $filename\n";
            last
        }

        if ( m/^$/ ) {                     # End of header
            print "-No--Date- $filename\n";
            last
        }
    }
    close MESSAGE;
}

# EOF

답변2

여기에서 읽으면 ctime과 mtime의 차이점이 아래에 설명되어 있습니다.http://cerebro.freeshell.org/log/unix-mtime-vs-ctime/. 약간의 아이디어를 말씀드릴 수 있습니다. 저장하는 모든 이메일에 타임스탬프를 추가하면 이메일을 다시 검색할 때 이메일이 전송되거나 수신된 정확한 날짜를 알 수 있습니다. 이것이 우리가 백업에 사용하는 방법입니다.

관련 정보