Como mover logs antigos - logs mysql

Como mover logs antigos - logs mysql

Preciso mover binlogs antigos para um diretório e compactá-los antes de movê-los para uma nova pasta.

Tenho uma crise de espaço por causa da qual estamos enfrentando problemas.

abaixo do comando não está funcionando.

ls -t binlog* | tail -n +4 | xargs mv /path-to-directory
ls -t binlog* | tail -n +4 | xargs echo mv /path-to-directory

Responder1

Se você REALMENTE não deseja recorrer ao logrotate, use findpara não analisar a saída de ls, enquanto imprime o horário de modificação do último arquivo encontrado em segundos desde 01/01/1970.

$ find ./* -maxdepth 0 -name "binlog*" -printf "%T@ %f\0" \
 | sort -z -k 1 -r \
 | cut -z -d " " -f2- \
 | tail -z -n +4 \
 | xargs -0 -I {} mv -f "{}" /path/to/directory/

O texto acima assume coreutils GNU, que aceitam -z( sort, cutand tail) ou -0( xargs) para usar linhas delimitadas por NUL, o que significa que o código funciona corretamente mesmo com novas linhas nos nomes dos arquivos.

Se você tiver certeza de que não há novas linhas nos nomes dos arquivos, acontece que você não precisa terminar cada arquivo encontrado com um nulo ( \0) porque você está classificando por linha no primeiro campo (horas da última modificação dos arquivos ) que nunca contém caracteres problemáticos. Você pode simplificar o acima para:

$ find ./* -maxdepth 0 -name "binlog*" -printf "%T@ %f\n" \
 | sort -k 1 -r \
 | cut -d " " -f2- \
 | tail -n +4 \
 | xargs -I {} mv -f "{}" /path/to/directory/

informação relacionada