Wie lösche ich ein Linux-Postfach mit einer großen Anzahl von E-Mails? [geschlossen]


193

Ich habe einige Cron-Jobs eingerichtet und sie senden das Cron-Ergebnis an eine E-Mail. Jetzt habe ich im Laufe der Monate eine große Anzahl von E-Mails gesammelt.

Meine Frage ist nun, wie ich all diese E-Mails aus meiner Mailbox löschen kann.



3
Geschlossen als Off-Topic, aber äußerst nützlich.
unfa

Antworten:


150

Sie können die /var/mail/usernameDatei einfach löschen , um alle E-Mails für einen bestimmten Benutzer zu löschen. Außerdem werden ausgehende, aber noch nicht gesendete E-Mails in gespeichert /var/spool/mqueue.


Die fragliche E-Mail, die alle Cron-E-Mails erhält, lautet cron_results@site.com. Ich möchte nur alle in dieser E-Mail empfangenen E-Mails löschen und andere intakt lassen. Wenn Sie den Benutzernamen / var / www / löschen, werden alle gelöscht, richtig?
Anjan

3
usernamemuss durch den Benutzer ersetzt werden, für den Sie die E-Mails entfernen möchten. In Ihrem Fall werden die E-Mails an den angerufenen Benutzer gesendet cron_results, sodass Sie sie löschen müssten /var/www/cron_results.
EdoDodo

5
Es ist keine gute Manipulation von Praxisdaten von außerhalb einer Anwendung. Wenn es eine Option oder einen Befehl gibt, der die Aufgabe ausführen kann, ist es besser, sie zu verwenden. Wie @timaschew antwortete, können Sie den Befehl 'd' im Mail-Tool verwenden.
Pocjoc

1
Sehr praktisch, wenn 'mail' nur mit 'Nicht genügend Speicher - abgebrochen' antwortet.
Herbert Van-Vliet

398

alternativer Weg:

mail -N
d *
quit

-NVerhindert die anfängliche Anzeige von Nachrichtenkopfzeilen beim Lesen von E-Mails oder Bearbeiten eines E-Mail-Ordners.
d *lösche alle Mails


6
funktioniert nicht auf Debian 7.
Karatedog

4
Es hat bei mir in fast Vanille Debian 7.5 funktioniert. Alternativ kann man alle gespeicherten Mails löschen, indem man einfach das > mboxHome-Verzeichnis eingibt. Dadurch wird nur die Mbox-Datei abgeschnitten.
Ciantic

4
@andreas: füge es einfach hinzu und arbeite erfolgreich unter CentOS 6.5.
Guillaume G.


2
Arbeiten auf Ubuntu 14.04 Server
Schüler

60

Benutz einfach:

mail
d 1-15
quit

Damit werden alle Nachrichten zwischen Nummer 1 und 15 gelöscht. Um alle zu löschen, verwenden Sie die d *.

Ich habe das gerade selbst auf Ubuntu 12.04.4 verwendet und es hat wie ein Zauber funktioniert.

Beispielsweise:

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

Dann überprüfen Sie Ihre E-Mails erneut:

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

Was Sie auslöst, ist, dass Sie verwenden xoder exitbeenden, wodurch die Änderungen während dieser Sitzung rückgängig gemacht werden.


1
d*Zumindest auf ist kein Platz dazwischen CentOS 7.
CodeMed

7
Verwenden, exitanstatt quitmich zu stolpern. exitbricht die Sitzung ab, sodass alle E-Mails, deren Löschung aussteht, intakt bleiben. quitschreibt die Änderungen zurück, sodass gelöschte E-Mails zu diesem Zeitpunkt festgeschrieben werden.
Jason

d 1-15funktioniert unter Debian 8. Danke!
Tadej

Funktioniert nicht in Red Hat. d 1-15 gibt 'Illegale Zahl' aus. D * auch.
Salvador Valencia

23

Ich denke, wir können die Datei nicht löschen, sondern löschen, da die Datei erstellt wird, wenn der Mail-Dienst noch aktiv ist. So etwas wie das Folgen erledigt den Job

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

Und ja, tut mir leid, dass ich diesen alten Thread geweckt habe, aber ich hatte das Gefühl, ich könnte dazu beitragen.


3
Auch für die Faulen funktioniert das Tippen auch:> / var / spool / mail / unixuser
Salvador Valencia


6

Unter UNIX / Linux / Mac OS X können Sie Dateien kopieren und überschreiben, nicht wahr? Wie wäre es mit dieser Lösung:

cp /dev/null /var/mail/root

2

Wenn Sie cyrus / sasl / imap auf Ihrem Mailserver verwenden, können Sie schnell und effizient alles in einem Postfach löschen, das älter als die angegebene Anzahl von Tagen ist, indem Sie den Befehl cyrus / imap ipurge verwenden . Hier ist zum Beispiel ein Beispiel, in dem alles entfernt wird (seien Sie vorsichtig !!), älter als 30 Tage vom Benutzer vleo . Beachten Sie, dass Sie als Cyrus- Benutzer (IMAP-Mail-Administrator) angemeldet sein müssen :

[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

Anstatt "d" zu verwenden, warum nicht "p". Ich bin nicht sicher, ob das "p *" funktionieren wird. Das habe ich nicht versucht. Sie können; Verwenden Sie jedoch das folgende Skript "

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

Für diejenigen, die neugierig sind, steht "p" für "print".
Isius
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.