Làm cách nào để tôi lọc một hộp thư linux với số lượng email khổng lồ? [đóng cửa]


193

Tôi đã thiết lập một số công việc định kỳ và họ gửi kết quả crons đến một email. Bây giờ qua nhiều tháng tôi đã tích lũy được một số lượng lớn email.

Bây giờ câu hỏi của tôi là làm thế nào tôi có thể lọc tất cả các email từ hộp thư của tôi?


1
Trong trường hợp bạn chỉ muốn xóa các tin nhắn cron chứ không phải các tin nhắn khác, hãy xem tại đây: unix.stackexchange.com/questions/217143/ Kẻ
Erel Segal-Halevi

3
Đóng như lạc đề, nhưng cực kỳ hữu ích.
unfa

Câu trả lời:


150

Bạn chỉ có thể xóa /var/mail/usernametệp để xóa tất cả các email cho một người dùng cụ thể. Ngoài ra, các email gửi đi nhưng chưa được gửi sẽ được lưu trữ trong /var/spool/mqueue.


Email tại câu hỏi nhận được tất cả các email cron được nói là cron_results@site.com. Tôi chỉ muốn thanh lọc tất cả các email nhận được trên email này, để lại những người khác nguyên vẹn. xóa tên người dùng / var / www / sẽ xóa tất cả, phải không?
anjan

3
usernamephải được thay thế bằng người dùng mà bạn muốn xóa email. Trong trường hợp của bạn, các email đang được gửi đến người dùng được gọi cron_results, vì vậy bạn sẽ phải xóa /var/www/cron_results.
EdoDodo

5
Nó không phải là một thao tác dữ liệu tốt từ bên ngoài một ứng dụng. Nếu có một tùy chọn hoặc lệnh có thể thực hiện công việc, tốt hơn là sử dụng nó. Như @timaschew đã trả lời, bạn có thể sử dụng lệnh 'd' bên trong công cụ thư.
pocjoc

1
Rất thiết thực khi 'thư' chỉ phản hồi với 'Không đủ bộ nhớ - Đã hủy bỏ'.
Herbert Van-Vliet

398

thay đổi phương pháp:

mail -N
d *
quit

-NỨc chế hiển thị ban đầu của tiêu đề thư khi đọc thư hoặc chỉnh sửa thư mục thư.
d *xóa tất cả thư


6
không hoạt động trên Debian 7.
karatedog

4
Nó hoạt động với tôi trong gần vanilla Debian 7.5. Ngoài ra, người ta có thể muốn xóa tất cả các thư đã lưu chỉ bằng cách gõ > mboxvào thư mục chính, điều này chỉ cần cắt bớt tệp mbox.
Ciantic

4
@andreas: chỉ cần thêm nó hoạt động thành công trên CentOS 6.5.
Guillaume G.

3
Cũng làm việc cho tôi trên Debian Wheezy (7.6)
yuikonnu

2
làm việc trên máy chủ Ubuntu 14.04
học sinh

60

Chỉ dùng:

mail
d 1-15
quit

Sẽ xóa tất cả các tin nhắn giữa số 1 và 15. để xóa tất cả, sử dụng d *.

Tôi chỉ sử dụng bản thân mình trên Ubuntu 12.04.4 và nó hoạt động như một bùa mê.

Ví dụ:

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

Sau đó kiểm tra lại thư của bạn:

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

Điều khiến bạn vấp ngã là bạn đang sử dụng xhoặc exitđể thoát khỏi những thay đổi trong quá trình đó.


1
Không có không gian giữa d*, ít nhất là trên CentOS 7.
CodeMed

7
Sử dụng exitchứ không phải quitlà vấp ngã tôi. exitsẽ hủy bỏ phiên, vì vậy mọi email đang chờ xử lý sẽ được giữ nguyên. quitsẽ viết lại các thay đổi, vì vậy các email đã xóa được cam kết tại thời điểm đó.
Jason

d 1-15hoạt động trên Debian 8. Cảm ơn!
Tadej

Không hoạt động trong Red Hat. d 1-15 đưa ra 'Số bất hợp pháp'. D * cũng vậy.
Salvador Valencia

23

Thay vì xóa, tôi nghĩ rằng chúng ta có thể vô hiệu hóa tệp, vì tệp sẽ được tạo nếu dịch vụ thư vẫn còn. Một cái gì đó như sau sẽ làm công việc

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

Và vâng, xin lỗi vì đã đánh thức chủ đề cũ này nhưng tôi cảm thấy mình có thể đóng góp.


3
Ngoài ra đối với những người lười biếng, chỉ cần gõ cái này cũng hoạt động:> / var / spool / mail / unixuser
Salvador Valencia


6

Trên UNIX / Linux / Mac OS X, bạn có thể sao chép và ghi đè các tệp không? Vậy làm thế nào về giải pháp này:

cp /dev/null /var/mail/root

2

Nếu bạn đang sử dụng cyrus / sasl / imap trên máy chủ thư của mình, thì một cách nhanh chóng và hiệu quả để thanh lọc mọi thứ trong hộp thư cũ hơn số ngày được chỉ định là sử dụng lệnh cyrus / imap ipurge . Ví dụ, đây là một ví dụ loại bỏ mọi thứ (hãy cẩn thận !!), cũ hơn 30 ngày từ người dùng vleo . Lưu ý rằng bạn phải đăng nhập với tư cách là người dùng cyrus (quản trị viên thư điện tử):

[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

Thay vì sử dụng "d", tại sao không "p". Tôi không chắc chắn nếu "p *" sẽ hoạt động. Tôi đã không thử điều đó. Bạn có thể; tuy nhiên sử dụng đoạn script sau "

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

Đối với những người tò mò, "p" là viết tắt của "in".
Isius
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.