내 로컬 메일 받은편지함을 grep하세요

내 로컬 메일 받은편지함을 grep하세요

cron 작업에서 로컬 받은 편지함으로 전송된 각 이메일을 다른 이메일에 기록하려고 합니다.txt문서. 라인을 사용할 때

mail | grep cron > cron_mail.txt

작업이 중지되지 않고 빈 공간이 생성됩니다.cron_mail.txt.

이 문제를 어떻게 해결할 수 있나요? 아니면 bash에서 더 쉽게 해결할 수 있는 방법이 있나요?

답변1

메일은 표준 오류 스트림으로 출력되는 것으로 보이므로 표준 출력만 파이프되기 때문에 grep으로 파이프되지 않습니다.

노력하다mail 2>&1 | grep cron > cron_mail.txt

2는 표준 오류 스트림의 파일 설명자입니다. 위 명령을 사용하면 표준 출력으로 리디렉션된 다음 파이프됩니다.

답변2

로컬 메일 백엔드가 Berkeley 메일박스 파일인 경우 다음을 시도해 보세요.

grep '^From cron  ' "$MAIL"

From이는 Berkeley mbox 파일이 각각의 새 메시지 앞에 구분선으로 (보낸 사람의 봉투 주소) 로 시작하는 줄과 두 개의 공백(일반적으로 메시지 도착 시간이 뒤따름)을 사용한다는 사실에 의존합니다 . (결과적으로 메시지 본문은 From줄 시작 부분 어디에도 5자를 포함할 수 없습니다.) cron예를 들어 데몬의 메시지에 FQDN 도메인 이름이 포함되어 있는 경우 정규식을 조정해야 합니다.

Berkeley mbox는 한때 어디에나 존재했지만 지금은 많은 시스템이 다른 메일함 형식을 사용하며 그 중 다수는 단일 플랫 파일이 아닌 폴더 기반입니다. maildir(특히 IMAP 메일함의 일반적인 형식)의 경우 다음을 시도하십시오.

find new cur tmp -type f -exec grep -m 1 '^From:' /dev/null | grep cron

각 메시지의 헤더를 확인합니다 From:(전혀 메시지 헤더가 아닌 유사하게 표시된 Berkeley 구분 기호와는 다름). 확인하려는 폴더에서 실행하거나, 디렉토리 매개변수에 , 및 하위 디렉토리 new에 대한 전체 경로를 포함할 수 있습니다 cur.tmp

관련 정보