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.
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.
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
.
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 gesendet cron_results
, sodass Sie sie löschen müssten /var/www/cron_results
.
alternativer Weg:
mail -N
d *
quit
-N
Verhindert die anfängliche Anzeige von Nachrichtenkopfzeilen beim Lesen von E-Mails oder Bearbeiten eines E-Mail-Ordners.
d *
lösche alle Mails
> mbox
Home-Verzeichnis eingibt. Dadurch wird nur die Mbox-Datei abgeschnitten.
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 x
oder exit
beenden, wodurch die Änderungen während dieser Sitzung rückgängig gemacht werden.
d*
Zumindest auf ist kein Platz dazwischen CentOS 7
.
exit
anstatt quit
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
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.
Einzeiler:
echo 'd *' | mail -N
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:
cp /dev/null /var/mail/root
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