[2-20]+ não é a maneira correta de testar se um número está no intervalo de 2 a 20 . Os colchetes em uma expressão regular correspondem a um único caractere que corresponde a qualquer um dos caracteres dentro dele. E - no conjunto de caracteres é usado para especificar um intervalo de caracteres (por exemplo, 2-9 ou a-z ); o intervalo 2-2 é igual a apenas 2 . Portanto, [2-20]+ é equivalente a [20]+ , corresponde a qualquer sequência dos caracteres 2 e 0 , como 2 , 20 , 02 , 2200 , etc.
Deve ser ([2-9]|1[0-9]|20) . Isso corresponde a um único dígito de 2 a 9 , 1 seguido de 0 a 9 ou 20 .
Se você estiver usando o GNU find , você pode usar o operador -delete em vez de -exec rm {} \; .
E não há necessidade de usar 2>&1 se você não estiver redirecionando a saída padrão. Por padrão, a saída padrão e o erro padrão são enviados como mensagem para o usuário.
@weekly find /var/log/ \( -iregex '.*\.([2-9]|1[0-9]|20)' -o -iname "*.gz" \) -delete