Linux posta kutusunu çok sayıda e-posta ile nasıl temizleyebilirim? [kapalı]


193

Bazı cron işleri ayarladım ve onlar crons sonucu bir e-posta gönderir. Şimdi aylar boyunca çok sayıda e-posta biriktirdim.

Şimdi sorum şu: Tüm bu e-postaları posta kutumdan nasıl temizleyebilirim?


1
Diğer iletileri değil, yalnızca cron mesajlarını temizlemek istiyorsanız, buraya bakın: unix.stackexchange.com/questions/217143/…
Erel Segal-Halevi

3
Konu dışı olarak kapalı, ancak son derece yararlı.
unfa

Yanıtlar:


150

/var/mail/usernameBelirli bir kullanıcının tüm e-postalarını silmek için dosyayı silebilirsiniz. Ayrıca, giden ancak henüz gönderilmemiş e-postalar da depolanacaktır /var/spool/mqueue.


Söz konusu tüm cron e-postalarını alan e-posta, cron_results@site.com dır. Sadece bu e-postada alınan tüm e-postaları temizlemek ve başkalarını olduğu gibi bırakmak istiyorum. / var / www / kullanıcı adını silmek hepsini silecektir, değil mi?
anjan

3
username, e-postalarını kaldırmak istediğiniz kullanıcıyla değiştirilmelidir. Sizin durumunuzda, e-postalar çağrılan kullanıcıya gönderilir cron_results, böylece silmeniz gerekir /var/www/cron_results.
EdoDodo

5
Bir uygulamanın dışından iyi bir uygulama veri manipülasyonu değildir. İşi yapabilecek bir seçenek veya komut varsa, onu kullanmak daha iyidir. @Timaschew yanıtladığı gibi, posta aracının içindeki 'd' komutunu kullanabilirsiniz.
pocjoc

1
'Posta' yalnızca 'Yeterli bellek yok - Durduruldu' ile yanıt verdiğinde çok pratiktir.
Herbert Van-Vliet

398

alternatif yol:

mail -N
d *
quit

-NPosta okurken veya posta klasörünü düzenlerken mesaj başlıklarının ilk görüntülenmesini engeller.
d *tüm postaları sil


6
Debian 7'de çalışmaz.
karatedog

4
Benim için neredeyse vanilya Debian 7.5'te çalıştı. Alternatif olarak, kaydedilmiş tüm postaları sadece > mboxana dizine yazarak silmek isteyebilirsiniz , bu sadece mbox dosyasını keser.
Ciantic

4
@andreas: CentOS 6.5'te başarıyla çalışmasını ekleyin.
Guillaume G.

3
Ayrıca Debian Wheezy (7.6)
yuikonnu

2
Ubuntu 14.04 sunucusu üzerinde çalışıyor
öğrenci

60

Sadece kullan:

mail
d 1-15
quit

1 ile 15 arasındaki tüm iletileri siler. Tümünü silmek için d *.

Ben sadece kendimi Ubuntu 12.04.4'te kullandım ve bir cazibe gibi çalıştı.

Örneğin:

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

Ardından postanızı tekrar kontrol edin:

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

Sizi harekete geçiren şey, o oturum sırasında değişiklikleri geri alan xveya exitçıkmak için kullanmanızdır .


1
d*En azından üzerinde arasında boşluk yok CentOS 7.
CodeMed

7
Beni kullanmaktan exitziyade kullanmaktı quit. exitoturumu iptal eder, böylece silinmeyi bekleyen e-postalar olduğu gibi kalır. quitdeğişiklikleri geri yazacağından silinen e-postalar bu noktada işlenir.
Jason

d 1-15Debian 8 üzerinde çalışıyor. Teşekkürler!
Tadej

Red Hat'da çalışmaz. d 1-15 'Yasadışı sayısal' verir. D * da öyle.
Salvador Valencia

23

Silmek yerine, dosyayı geçersiz kılabiliriz, çünkü posta hizmeti hala açıksa dosya oluşturulur. Aşağıdaki gibi bir şey işi yapacak

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

Ve evet, bu eski ipliği uyandırdığım için üzgünüm ama katkıda bulunabileceğimi hissettim.


3
Ayrıca tembel için, sadece bu yazarak da çalışır:> / var / spool / mail / unixuser
Salvador Valencia


6

UNIX / Linux / Mac OS X'te dosyaları kopyalayıp geçersiz kılabilirsiniz, değil mi? Peki bu çözüme ne dersiniz:

cp /dev/null /var/mail/root

2

Posta sunucunuzda cyrus / sasl / imap kullanıyorsanız, daha eski bir posta kutusundaki her şeyi temizlemenin hızlı ve etkili bir yolu, belirtilen gün sayısı cyrus / imap ipurge komutunu kullanmaktır. Örneğin, kullanıcı vleo'dan 30 günden eski olan her şeyi (dikkatli olun !!) kaldıran bir örnek . Cyrus (imap posta yöneticisi) kullanıcısı olarak oturum açmanız gerektiğine dikkat edin :

[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" kullanmak yerine, neden "p" kullanmıyorsunuz? "P *" nin çalışıp çalışmadığından emin değilim. Bunu denemedim. Yapabilirsin; ancak şu komut dosyasını kullanın "

#!/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

Merak edenler için "p", "yazdır" ın kısaltmasıdır.
Isius
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.