for file in *; do tail -n 500 filename > filename2 && mv filename2 filename ; done
Escrever no arquivo que você está lendo não é uma boa ideia. Minha solução também não é boa, pois você pode perder o log entre o comando tail e mv.
Mas de qualquer maneira
for file in *;
é uma maneira de fazer o loop de arquivos de um diretório.
Mas por que você não usa logrotate ??