Como faço para limpar uma caixa de correio linux com um grande número de emails? [fechadas]

193

Eu configurei alguns trabalhos cron e eles enviam o resultado dos crons para um email. Agora, ao longo dos meses, acumulei um grande número de emails.

Agora, minha pergunta é como posso limpar todos os emails da minha caixa de correio?

anjan
fonte
1
No caso de você querer limpar apenas as mensagens agendadas e não outras mensagens, consulte aqui: unix.stackexchange.com/questions/217143/...
Erel Segal-Halevi
3
Fechado como fora de tópico, mas extremamente útil.
unfa,

Respostas:

150

Você pode simplesmente excluir o /var/mail/usernamearquivo para excluir todos os emails de um usuário específico. Além disso, os e-mails enviados, mas ainda não enviados, serão armazenados /var/spool/mqueue.

EdoDodo
fonte
O email em questão que recebe todos os emails cron é, por exemplo, [email protected]. Eu só quero limpar todos os e-mails recebidos nesse e-mail, deixando os outros intactos. excluir o / var / www / nome de usuário excluirá tudo, certo?
anjan
3
usernameprecisa ser substituído pelo usuário para o qual você deseja remover os e-mails. No seu caso, os e-mails estão sendo enviados para o usuário chamado cron_results, portanto, você deve excluir /var/www/cron_results.
EdoDodo 16/08
5
Não é uma boa manipulação de dados praxis de fora de um aplicativo. Se houver uma opção ou comando que possa fazer o trabalho, é melhor usá-lo. Como o @timaschew respondeu, você pode usar o comando 'd' dentro da ferramenta de correio.
pocjoc 3/09/2015
1
Muito prático quando o 'mail' responde apenas com 'Memória insuficiente - interrompida'.
Herbert Van-Vliet
398

caminho alternativo:

mail -N
d *
quit

-NInibe a exibição inicial dos cabeçalhos das mensagens ao ler e editar uma pasta de correio.
d *excluir todos os e-mails

timaschew
fonte
6
não funciona no Debian 7.
karatedog 08/08
4
Funcionou para mim no Debian 7.5 quase baunilha. Como alternativa, pode-se excluir todos os e-mails salvos digitando simplesmente o > mboxdiretório inicial, isso apenas trunca o arquivo mbox.
Ciantic # 26/14
4
@andreas: basta adicioná-lo funcionando com sucesso no CentOS 6.5.
Guillaume G.
3
Também funcionou para mim no Debian Wheezy (7.6)
yuikonnu 18/01/15
2
trabalhando no servidor Ubuntu 14.04
pupil
60

Apenas use:

mail
d 1-15
quit

Que excluirá todas as mensagens entre os números 1 e 15. Para excluir todas, use o d *.

Eu mesmo usei isso no ubuntu 12.04.4 e funcionou como um encanto.

Por exemplo:

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

Em seguida, verifique seu e-mail novamente:

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

O que está atrapalhando você é que você está usando xou exitpara sair, o que reverte as alterações durante essa sessão.

Mip
fonte
1
Não há espaço entre d*, pelo menos diante CentOS 7.
CodeMed
7
Usando em exitvez de quitme fazer tropeçar. exitinterromperá a sessão, para que todos os emails com exclusão pendente sejam mantidos intactos. quitgravará as alterações novamente, para que os e-mails excluídos sejam confirmados nesse ponto.
Jason
d 1-15funciona no Debian 8. Obrigado!
Tadej
Não funciona no Red Hat. d 1-15 fornece 'Numérico ilegal'. O mesmo acontece com d *.
Salvador Valencia
23

Em vez de excluir, acho que podemos anular o arquivo, porque o arquivo será criado se o serviço de email ainda estiver ativado. Algo como seguir fará o trabalho

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

E sim, desculpe por despertar esse tópico antigo, mas achei que poderia contribuir.

xploreraj
fonte
3
Também para os preguiçosos, basta digitar isso também funciona:> / var / spool / mail / unixuser
Salvador Valencia
22

Um forro:

echo 'd *' | mail -N
Michael Munsey
fonte
Na caixa HP-UX, o correio não possui opções -N. Mas, yes 'd' | mailfunciona como esperado.
Bycchan Lee
6

No UNIX / Linux / Mac OS X, você pode copiar e substituir arquivos, não é? Então, que tal esta solução:

cp /dev/null /var/mail/root
peter_pilgrim
fonte
2

Se você estiver usando cyrus / sasl / imap no seu servidor de e-mail, uma maneira rápida e eficiente de limpar tudo em uma caixa de correio mais antiga do que o número de dias especificado é usar o comando cyrus / imap ipurge . Por exemplo, aqui está um exemplo de remoção de tudo (tenha cuidado!), Com mais de 30 dias do usuário vleo . Observe que você deve estar logado como usuário do cyrus (administrador de e-mail do 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

vleo
fonte
1

Em vez de usar "d", por que não "p". Não tenho certeza se o "p *" funcionará. Eu não tentei isso. Você pode; no entanto, use o seguinte script "

#!/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
WSimpson
fonte
Para quem está curioso, "p" é a abreviação de "print".
Isius