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.
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 [email protected]. 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
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.
3
Arbeitete
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.
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.
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
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
Antworten:
Sie können die
/var/mail/username
Datei 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
.quelle
username
muss 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 gesendetcron_results
, sodass Sie sie löschen müssten/var/www/cron_results
.alternativer Weg:
-N
Verhindert die anfängliche Anzeige von Nachrichtenkopfzeilen beim Lesen von E-Mails oder Bearbeiten eines E-Mail-Ordners.d *
lösche alle Mailsquelle
> mbox
Home-Verzeichnis eingibt. Dadurch wird nur die Mbox-Datei abgeschnitten.Benutz einfach:
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:
Dann überprüfen Sie Ihre E-Mails erneut:
Was Sie auslöst, ist, dass Sie verwenden
x
oderexit
beenden, wodurch die Änderungen während dieser Sitzung rückgängig gemacht werden.quelle
d*
Zumindest auf ist kein Platz dazwischenCentOS 7
.exit
anstattquit
mich zu stolpern.exit
bricht die Sitzung ab, sodass alle E-Mails, deren Löschung aussteht, intakt bleiben.quit
schreibt die Änderungen zurück, sodass gelöschte E-Mails zu diesem Zeitpunkt festgeschrieben werden.d 1-15
funktioniert unter Debian 8. Danke!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
Und ja, tut mir leid, dass ich diesen alten Thread geweckt habe, aber ich hatte das Gefühl, ich könnte dazu beitragen.
quelle
Einzeiler:
quelle
yes 'd' | mail
wie erwartet.Unter UNIX / Linux / Mac OS X können Sie Dateien kopieren und überschreiben, nicht wahr? Wie wäre es mit dieser Lösung:
quelle
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
quelle
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 "
quelle