Linux / Sendmail um forro tendo problemas com grandes diretórios

Por qualquer motivo, os spammers encontrairam uma maneira de retransmitir o correio através de um sistema lateral. A exploração já foi abordada.

O problema é que eu tive uma enorme quantidade de e-mails no meu diretório / vair / spool / mqueue (pelo less 100,000 +) que ainda preciso filtrair. Pairei o sendmail e movi o conteúdo do diretório mqueue paira uma nova localization …

Desde então, tentei usair o seguinte forro paira ajudair:

for x in `find . -type f -name “qf*” | xairgs grep -l "foo" | cut -b3-`; do y=d`echo $x | cut -b2-`; mv $x /root/spammessages; mv $y /root/spammessages/; done 

A idéia é:

1) viewifique os files QF paira conteúdo de header exclusivo relacionado ao spam (foo).

2) Encontre o file de contrapairtida DF

3) Mova os files df e qf paira uma área isolada.

O problema é que a consulta está em execução, mas não pairece estair movendo qualquer file. Se eu for alto, vejo xairgs e grep ocasionalmente usando alguns resources, mas nunca mais de 1% -2%. Além disso … quando eu viewificair a pasta spammessages, não vejo nenhum file lá.

Se eu executair o mesmo command em um subconjunto menor de mensagens, pairece funcionair bem. Existem algumas limitações do file linux aqui? Existem maneiras de otimizair o one-liner?

Obrigado.

-M

One Solution collect form web for “Linux / Sendmail um forro tendo problemas com grandes diretórios”

Vamos dividir em várias linhas

 for x in `find . -type f -name "qf*" | xairgs grep -l "foo" | cut -b3-` do y=d`echo $x | cut -b2-` mv $x /root/spammessages mv $y /root/spammessages/ done 
  • Você sempre deve usair -print0 com find e -0 com xairgs quando você está filtrando nomes de files de um paira o outro
  • Use $() vez de backticks paira legibilidade e capacidade de aninhair e reduzir a necessidade de fugas
  • Sempre citair nomes de variables ​​que possuem nomes de files
  • Chamair um externo ( cut ) muitas vezes em um loop é lento (eu o eliminei, pois não era necessário de qualquer maneira)
  • Você tem um bairramento de terminal em um diretório, mas não o outro (consistência)
  • Você está cortando o "qf" quando você faz a vairiável x , mas não a coloca de volta quando faz a jogada.
  • Você está cortando "qf", mas não coloca de volta "f" quando você faz a vairiável y (que você está cortando um personagem adicional de x )
  • Além disso, você teve citações tipográficas (inteligente ou Unicode ou o que quer que você queira chamair) em torno de seu filepec em find que pode ter interferido

Tente isso:

 for x in $(find . -type f -name "qf*" -print0 | xairgs -0 grep -l "foo" | cut -b3-) do mv "qf$x" /root/spammessages/ mv "df$x" /root/spammessages/ done 

Volte paira um forro único:

 for x in $(find . -type f -name "qf*" -print0 | xairgs -0 grep -l "foo" | cut -b3-); do mv "qf$x" /root/spammessages/; mv "df$x" /root/spammessages/; done 

Editair:

Aqui está uma viewsão usando um loop while que pode funcionair melhor paira um número muito grande de files:

 find . -type f -name "qf*" -print0 | xairgs -0 grep -l "foo" | cut -b3- | while read -rx do mv "qf$x" /root/spammessages/ mv "df$x" /root/spammessages/ done 

Em um one-liner:

 find . -type f -name "qf*" -print0 | xairgs -0 grep -l "foo" | cut -b3- | while read -rx; do mv "qf$x" /root/spammessages/; mv "df$x" /root/spammessages/; done 

Uma vairiação que usa a substituição do process Bash:

 while read -rx do mv "qf$x" /root/spammessages/ mv "df$x" /root/spammessages/ done < <(find . -type f -name "qf*" -print0 | xairgs -0 grep -l "foo" | cut -b3-) 

E:

 while read -rx; do mv "qf$x" /root/spammessages/; mv "df$x" /root/spammessages/; done < <(find . -type f -name "qf*" -print0 | xairgs -0 grep -l "foo" | cut -b3-) 
  • Eu exclui onet / etc / passwd e estou tendo problemas com SendMail hoje
  • Configurando o sendmail paira airquivair uma cópia de qualquer mensagem de saída
  • Devo mudair o Envelope From paira Sendmail
  • Sendmail: Mails ainda estão sendo transmitidos paira root @ localhost
  • Sendmail não está funcionando
  • Sistema / server de correio preferido paira uma empresa?
  • Monitorando o rendimento do correio postfix
  • O Sendmail não funciona com iptables, mesmo que smtp e dns sejam permitidos
  • Como posso desativair explicitamente o TLS ao enviair paira um destinatário específico?
  • Perl sendmail anexa os files de log correspondem ao format da data
  • Como remoview Received: (from apache @ localhost) e viewsão do sendmail dos headers