![Como mover logs antigos - logs mysql](https://rvso.com/image/192244/Como%20mover%20logs%20antigos%20-%20logs%20mysql%20.png)
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 find
para 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
, cut
and 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/