どうすれば膨大な数のメールが入ったLinuxメールボックスを削除できますか?[閉まっている]


193

私はいくつかのcronジョブをセットアップし、cronの結果をメールで送信します。数か月間、私は膨大な数のメールを蓄積してきました。

今私の質問はどのように私は私のメールボックスからそれらのすべての電子メールを削除することができますか?


1
あなたが唯一のcronのメッセージではなく他のメッセージをきれいにしたい場合は、こちらを参照してください。unix.stackexchange.com/questions/217143/...
Erelシーガル-Halevi

3
トピックから外れていますが、非常に便利です。
unfa

回答:


150

/var/mail/usernameファイルを削除するだけで、特定のユーザーのすべてのメールを削除できます。また、送信されたがまだ送信されていないメールはに保存され/var/spool/mqueueます。


すべてのcron電子メールを受信する問題の電子メールは、cron_results @ site.comです。このメールで受信したすべてのメールを削除し、他のメールはそのままにしておきたいだけです。/ var / www / usernameを削除すると、すべて削除されますよね?
アンジャン

3
usernameメールを削除するユーザーに置き換える必要があります。あなたの場合、電子メールはと呼ばれるユーザーに送信されているcron_resultsので、削除する必要があります/var/www/cron_results
EdoDodo 2011

5
アプリケーションの外部からの実用的なデータ操作ではありません。ジョブを実行できるオプションまたはコマンドがある場合は、それを使用することをお勧めします。@timaschewが回答したように、メールツール内で「d」コマンドを使用できます。
pocjoc

1
「メール」が「メモリ不足-中止」でのみ応答する場合に非常に実用的です。
Herbert Van-Vliet

398

別の方法:

mail -N
d *
quit

-Nメールを読んだり、メールフォルダを編集したりするときのメッセージヘッダーの初期表示を禁止します。
d *すべてのメールを削除


6
Debian 7では動作しません
karatedog 2013

4
ほぼバニラのDebian 7.5で動作しました。あるいは、単に> mboxホームディレクトリに入力するだけで、保存されたすべてのメールを削除することもできます。これは、mboxファイルを切り捨てるだけです。
Ciantic 2014年

4
@andreas:CentOS 6.5で正常に動作するように追加するだけです。
Guillaume G.

3
Debian Wheezy(7.6)でも私のために働きました
yuikonnu 2015年

2
Ubuntu 14.04サーバーでの作業
生徒の

60

ただ使用する:

mail
d 1-15
quit

1から15までのすべてのメッセージを削除しますd *。すべてを削除するには、を使用します。

私はこれをubuntu 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、2015年

7
私をつまずくのexitではなく使用quitする。exitはセッションを中止するため、削除保留中のメールはそのまま残ります。quit変更を書き戻すので、削除されたメールはその時点でコミットされます。
Jason

d 1-15Debian 8で動作します。ありがとう!
Tadej 2017

Red Hatでは機能しません。d 1-15は「無効な数値」を出力します。d *もそうです。
サルバドールバレンシア

23

メールサービスがまだオンの場合にファイルが作成されるため、削除するのではなく、ファイルを無効にできると思います。次のようなものが仕事をします

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

そして、はい、この古い糸を目覚めさせて申し訳ありませんが、私は貢献できると感じました。


3
また、怠惰な場合は、次のように入力するだけでも機能します。> / var / spool / mail / unixuser
サルバドールバレンシア


6

UNIX / Linux / Mac OS Xでは、ファイルをコピーして上書きできますか?それで、この解決策はどうですか:

cp /dev/null /var/mail/root

2

メールサーバーでcyrus / sasl / imapを使用している場合、指定した日数より古いメールボックス内のすべてを消去する1つの高速かつ効率的な方法は、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」は「印刷」の略です。
Isius
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.