The procmailpaket termasuk alat yang berguna yang disebut formailyang memungkinkan pengguna untuk iterate atas pesan individu dari kotak surat mbox-gaya tradisional. Pendekatan saya untuk tugas-tugas seperti ini adalah dengan membagi mbox menjadi pesan-pesan individual, menggunakan alat UNIX standar (grep, rm) untuk memproses pesan-pesan, dan kemudian merakit kembali kotak surat. Secara alami, ini perlu dilakukan dengan sendmailproses berhenti, sehingga tidak ada surat baru yang datang saat Anda sedang bekerja. Hanya downtime singkat yang diperlukan.
Anda tidak mengatakan BSD mana yang Anda gunakan, tetapi saya akan menganggap FreeBSD. Saya juga akan menganggap bahwa Anda menggunakan bashshell Anda, dan bahwa Anda memiliki akses root ke kotak, atau setidaknya hak sudo yang cukup untuk memulai / menghentikan sendmailinstance pada mesin Anda, dan untuk menulis langsung ke kotak surat Anda /var/mail/$USER.
Instal procmailpaket dan baca formailhalaman manual.
$ sudo pkg install procmail
$ man formail
Jadikan ruang kerja bersih:
$ mkdir ~/work
$ cd ~/work
Buat skrip sederhana dan buat agar bisa dieksekusi:
$ cat << EOF > cat-msg.sh
#!/bin/sh
cat > msg-$FILENO.txt
EOF
$ chmod 755 cat-msg.sh
Dan satu lagi:
$ cat << EOF > split-mbox.sh
#!/bin/sh
export FILENO="00000"
formail -s cat-msg.sh < "$@"
EOF
$ chmod 755 split-mbox.sh
Hentikan server surat:
$ sudo service sendmail stop
Bagi mbox Anda menjadi beberapa file di direktori saat ini:
./split-mbox.sh /var/mail/$USER
Perintah itu membaca kotak surat Anda, dan membuat file msg-#####.txtdi direktori saat ini. Itu tidak menulis ke atau menghapus /var/mail/$USERkotak surat Anda , jadi tidak ada salahnya dilakukan.
Menggunakan grep, mengidentifikasi msg-*.txtfile yang ingin Anda hapus, dan memeriksa beberapa di antaranya untuk memastikan bahwa Anda yakin regexp Anda hanya menargetkan pesan yang ingin Anda hapus. Boleh saja menggunakan beberapa pass regexp, tetapi Anda harus yakin bahwa setiap regexp tidak memiliki positif palsu.
$ grep -lF '^From: spammer@example.com' msg*.txt
$ (use less to spot-check a few or all of them)
Jika file pesan yang diidentifikasi oleh grepmemang pesan yang ingin Anda hapus, maka:
$ grep -lF '^From: spammer@example.com' msg*.txt | xargs rm -v
Jika ada beberapa regexps yang ingin Anda gunakan untuk menemukan pesan yang akan dihapus, Anda dapat kembali dan greplagi dengan regexp yang berbeda dan periksa lokasi klik tersebut, dll.
Setelah Anda berhasil menghapus semua pesan yang menyinggung, buat cadangan kotak surat Anda, tulis msg*.txtfile yang tersisa ke kotak surat Anda, dan mulai kembali server surat:
$ cp -vp /var/mail/$USER mbox-$USER
$ cat msg*.txt > /var/mail/$USER
$ sudo service sendmail start
Jika Anda menemukan alat ini berguna, dan ingin menyimpannya untuk digunakan di masa mendatang, maka:
$ sudo mv -vi split-mbox.sh cat-msg.sh /usr/local/bin/