엄청난 수의 이메일로 리눅스 메일 박스를 어떻게 제거합니까? [닫은]


193

일부 크론 작업을 설정했으며 크론 결과를 전자 메일로 보냅니다. 몇 달에 걸쳐 나는 수많은 이메일을 축적했습니다.

이제 내 질문은 어떻게 사서함에서 모든 전자 메일을 제거 할 수 있습니까?


1
cron 메시지 만 청소하고 다른 메시지는 제거하지 않으려면 다음을 참조하십시오 : unix.stackexchange.com/questions/217143/…
Erel Segal-Halevi

3
주제를 벗어 났지만 크게 유용합니다.
unfa

답변:


150

/var/mail/username파일을 삭제하여 특정 사용자의 모든 이메일을 삭제할 수 있습니다 . 또한 발신하지만 아직 전송되지 않은 이메일은에 저장됩니다 /var/spool/mqueue.


모든 cron 이메일을받는 문제의 이메일은 cron_results@site.com입니다. 이 이메일에 수신 된 모든 이메일을 제거하고 다른 이메일은 그대로 유지하려고합니다. / var / www / username을 삭제하면 모두 삭제됩니다.
anjan

3
username이메일을 삭제하려는 사용자로 대체해야합니다. 귀하의 경우 이메일이 (이)라는 사용자에게 전송되므로을 ( cron_results를) 삭제해야합니다 /var/www/cron_results.
EdoDodo

5
응용 프로그램 외부에서 좋은 데이터 처리가 아닙니다. 작업을 수행 할 수있는 옵션이나 명령이 있으면 사용하는 것이 좋습니다. @timaschew가 대답했듯이 메일 도구 내에서 'd'명령을 사용할 수 있습니다.
pocjoc

1
'메일'이 '메모리 부족-중단됨'으로 만 응답 할 때 매우 실용적입니다.
허버트 반 빌레

398

대체 방법 :

mail -N
d *
quit

-N메일을 읽거나 메일 폴더를 편집 할 때 메시지 헤더의 초기 표시를 금지합니다.
d *모든 메일을 삭제


6
7. 데비안에서 작동하지 않습니다
karatedog에게

4
거의 바닐라 데비안 7.5에서 저에게 효과적이었습니다. 또는 > mbox홈 디렉토리에 입력하여 저장된 모든 메일을 삭제하고 싶을 수도 있습니다. mbox 파일이 잘립니다.
Ciantic

4
@ andreas : CentOS 6.5에서 성공적으로 작동하도록 추가하십시오.
기 illa G.

3
또한 데비안 위지 (7.6)에서 일했습니다
yuikonnu

2
Ubuntu 14.04 서버에서 작업
학생

60

그냥 사용하십시오 :

mail
d 1-15
quit

번호 1과 15 사이의 모든 메시지가 삭제됩니다. 모두 삭제하려면을 사용하십시오 d *.

방금 우분투 12.04.4에서 이것을 직접 사용했으며 매력처럼 작동했습니다.

예를 들면 다음과 같습니다.

eric@dev ~ $ mail
Heirloom Mail version 12.4 7/29/08.  Type ? for help.
"/var/spool/mail/eric": 2 messages 2 new
>N  1 Cron Daemon           Tue Jul 29 17:43  23/1016  "Cron <eric@ip-10-0-1-51> /usr/bin/php /var/www/sandbox/eric/c"
 N  2 Cron Daemon           Tue Jul 29 17:44  23/1016  "Cron <eric@ip-10-0-1-51> /usr/bin/php /var/www/sandbox/eric/c"
& d *
& quit

그런 다음 메일을 다시 확인하십시오.

eric@dev ~ $ mail
No mail for eric
eric@dev ~ $

트립 되는 것은 해당 세션 동안 변경 사항을 롤백하는 것을 사용 x하거나 exit종료하는 것입니다.


1
사이 d*에 공백이 없습니다 CentOS 7.
CodeMed

7
나를 넘어 뜨리기 exit보다는 사용 하는 것 quit. exit삭제 대기중인 이메일은 그대로 유지됩니다. quit변경 사항을 다시 작성하므로 삭제 된 이메일이 해당 시점에 커밋됩니다.
Jason

d 1-15데비안 8에서 작동합니다. 감사합니다!
Tadej

Red Hat에서는 작동하지 않습니다. d 1-15는 '잘못된 숫자'를 나타냅니다. d *도 마찬가지입니다.
살바도르 발렌시아

23

메일 서비스가 여전히 켜져 있으면 파일이 생성되므로 파일을 삭제하는 대신 파일을 무효화 할 수 있다고 생각합니다. 다음과 같은 일이 일을 할 것입니다

cat /dev/null >/var/spool/mail/tomlinuxusr

그렇습니다.이 오래된 실을 깨워서 미안하지만 내가 기여할 수 있다고 느꼈습니다.


3
또한 게으른 경우 입력하면 다음과 같이 작동합니다.> / var / spool / mail / unixuser
Salvador Valencia

22

짧막 한 농담:

echo 'd *' | mail -N

HP-UX 상자에서 메일에는 -N 옵션이 없습니다. 그러나 yes 'd' | mail예상대로 작동합니다.
이병찬

6

UNIX / Linux / Mac OS X에서는 파일을 복사하고 덮어 쓸 수 있습니다. 이 솔루션은 어떻습니까?

cp /dev/null /var/mail/root

2

메일 서버에서 cyrus / sasl / imap을 사용하는 경우 지정된 일 수보다 오래된 메일 함의 모든 항목을 제거하는 빠르고 효율적인 방법은 cyrus / imap ipurge 명령을 사용하는 것입니다. 예를 들어, 다음은 사용자 vleo 에서 30 일보다 오래된 모든 것을 제거하는 예제입니다 (주의해야합니다 !!) . cyrus (imap 메일 관리자) 사용자 로 로그인해야합니다 .

[cyrus@mailserver ~]$ /usr/lib/cyrus-imapd/ipurge -f -d 30 user.vleo Working on user.vleo... total messages 4 total bytes 113183 Deleted messages 0 Deleted bytes 0 Remaining messages 4 Remaining bytes 113183


1

"d"를 사용하는 대신 "p"를 사용하지 마십시오. "p *"가 작동하는지 확실하지 않습니다. 나는 그것을 시도하지 않았다. 당신은 할 수 있습니다; 그러나 다음 스크립트를 사용하십시오 "

#!/bin/bash
#

MAIL_INDEX=$(printf 'h a\nq\n' | mail | egrep -o '[0-9]* unread' | awk '{print $1}')

markAllRead=
for (( i=1; i<=$MAIL_INDEX; i++ ))
do
   markAllRead=$markAllRead"p $i\n"
done
markAllRead=$markAllRead"q\n"
printf "$markAllRead" | mail

궁금한 사람들을 위해 "p"는 "print"의 줄임말입니다.
Isius
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.