SpamAssassin tem um recurso para "aprender" spam. Cada usuário tem uma pasta .spam em sua pasta de e-mail e será instruído a mover qualquer spam para essa pasta. (Os usuários estão usando o IMAP.) Eu configurei uma tarefa do cron para alimentar o conteúdo da pasta .spam de cada conta em sa-learn .
02 02 * * * sa-learn -p ~/.spamassassin/user_prefs --spam ~/mail/*/*/.spam/{cur,new}
Isso funciona como previsto, de acordo com o e-mail de confirmação do cron.
Agora desejo autodefinir o conteúdo das pastas .spam na conclusão bem-sucedida do comando sa-learn. Estou correto em pensar que posso adicionar o seguinte ao final da tarefa cron acima?
&& rm ~/mail/*/*/.spam/{cur,new}
Isso parece correto?
Notas: isso está sendo testado para uso em várias contas de revenda de cPanel. Eu não tenho acesso ao shell.
Atualização 1 após a resposta de Celada e os comentários abaixo:
The way you need to do this is to atomically move each message to a different directory which you control and which the IMAP server doesn't touch, then process and delete it from within that location. Fortunately you are using Maildir which permits such atomic moves.
Que tal
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
Estou deliberadamente não usando mktemp
para que, se um diretório for deixado para trás, ele seja excluído na próxima execução.
Atualização 2 após o comentário de xhienne:
Not sure moving the directories cur and new is a good idea => move their content instead. Moreover, there will be a name collision since you are moving many directories named new and cur to the same destination.
Não sei como evitar colisões de nomes de arquivo.
Finally, moving to /tmp might mean moving to another partition, with the incurred extra-I/Os and the possibility of lacking disk space (/tmp is sometimes a small separate partition) => preferably, move to a special folder like ~/mail/.sa-learn that you can delete in the end
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
Atualização 3 :
Acho que isso não funciona se a pasta new
não existir. Estou com erro:
mv: cannot stat '/home/username/mail/*/*/.spam/new/*': No such file or directory
Não parece haver nenhuma opção de "ignorar" para mv
. Alguma idéia?