스팸 암살자스팸을 "학습"하는 기능이 있습니다. 각 사용자의 메일 폴더에는 .spam 폴더가 있으며 모든 스팸을 이 폴더로 이동하라는 안내를 받게 됩니다. (사용자는 IMAP을 사용하고 있습니다.) 각 계정의 .spam 폴더 내용을 다음으로 공급하는 cron 작업을 설정했습니다.SaLearn.
02 02 * * * sa-learn -p ~/.spamassassin/user_prefs --spam ~/mail/*/*/.spam/{cur,new}
cron 확인 이메일에 따르면 이는 예상대로 작동합니다.
이제 sa-learn 명령이 성공적으로 완료되면 .spam 폴더의 내용이 자동으로 삭제되기를 원합니다. 위의 cron 작업 끝에 다음을 추가할 수 있다고 생각하는 것이 맞습니까?
&& rm ~/mail/*/*/.spam/{cur,new}
이게 맞는 것 같나요?
참고: 여러 cPanel 리셀러 호스팅 계정에서 사용하기 위해 테스트 중입니다. 쉘 액세스 권한이 없습니다.
업데이트 1Celada의 답변과 의견은 다음과 같습니다.
이를 수행하는 방법은 각 메시지를 사용자가 제어하고 IMAP 서버의 영향을 받지 않는 다른 디렉터리로 자동으로 이동한 다음 해당 위치에서 메시지를 처리하고 삭제하는 것입니다. 다행히도 이러한 종류의 원자 이동을 허용하는 Maildir을 사용하고 있습니다.
어때요?
mkdir -p /tmp/sa_tmp
&& mv ~/mail/*/*/.spam/{cur,new} /tmp/sa_tmp
&& sa-learn -p ~/.spamassassin/user_prefs --spam /tmp/sa_tmp
&& rm -rf /tmp/sa_tmp
mktemp
디렉토리를 잊어버리면 다음에 실행할 때 삭제되도록 의도적으로 사용하지 않은 상태로 두었습니다 .
업데이트 2Xhienne는 다음과 같이 댓글을 달았습니다.
cur 및 new 디렉토리를 이동하는 것이 좋은 생각인지 확실하지 않습니다 => 해당 내용을 이동합니다. 또한 new 및 cur라는 이름의 많은 디렉터리를 동일한 대상으로 이동하기 때문에 이름 충돌이 발생합니다.
파일 이름 충돌을 피하는 방법을 잘 모르겠습니다.
마지막으로 /tmp로 이동한다는 것은 다른 파티션으로 이동하는 것을 의미할 수 있으며, 이로 인해 추가 I/O가 발생하고 디스크 공간이 부족할 수 있습니다(/tmp는 때때로 작은 독립 파티션입니다) => ~/ 특수 폴더 mail/과 같은 것으로 이동하는 것이 좋습니다. .sa - 마지막에 삭제될 수 있음을 이해합니다.
mkdir -p ~/mail/.sa-learn
&& mv ~/mail/*/*/.spam/{cur,new}/* ~/mail/.sa-learn
&& sa-learn -p ~/.spamassassin/user_prefs --spam ~/mail/.sa-learn
&& rm -rf ~/mail/.sa-learn
업데이트 3:
new
폴더가 없으면 작동하지 않을 것 같아요. 오류가 발생합니다.
mv: cannot stat `/home/username/mail/*/*/.spam/new/*': No such file or directory
"무시" 스위치가 없는 것 같습니다 mv
. 어떤 아이디어가 있나요?
답변1
당신이 제안한 솔루션은 흥미 롭습니다. 실행 중 또는 실행 중에 새 메시지가 추가(또는 삭제 또는 변경)되지 않는다고 보장할 수 없기 때문에 sa-learn
흥미롭고 불행한 일이 많이 발생할 수 있습니다. 그 중 가장 분명한 것은 메시지를 제공하지 않고 메시지를 삭제할 수 있다는 것입니다. .sa-learn
rm
sa-learn
이를 수행하는 방법은 각 메시지를 사용자가 제어하고 IMAP 서버의 영향을 받지 않는 다른 디렉터리로 자동으로 이동한 다음 해당 위치에서 메시지를 처리하고 삭제하는 것입니다. 다행히도 이러한 종류의 원자 이동을 허용하는 Maildir을 사용하고 있습니다.