Cómo mover registros antiguos: registros de MySQL

Cómo mover registros antiguos: registros de MySQL

Necesito mover binlogs antiguos a un directorio y también comprimirlos antes de moverlos a una carpeta nueva.

Tengo una escasez de espacio por lo que nos enfrentamos a problemas.

El siguiente comando no funciona.

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

Respuesta1

Si REALMENTE no desea recurrir a logrotate, utilice findno analizar la salida de ls, mientras imprime la hora de modificación del último archivo encontrado en segundos desde 1970.01.01.

$ 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/

Lo anterior supone GNU coreutils, que aceptan -z( sorty ) o ( ) para usar líneas delimitadas cutpor NUL, lo que significa que el código funciona correctamente incluso con nuevas líneas en los nombres de archivos.tail-0xargs

Si puede estar seguro de que no hay nuevas líneas en los nombres de los archivos, resulta que no necesita terminar cada archivo encontrado con un valor nulo ( \0) porque está ordenando por líneas en el primer campo (horas de la última modificación de los archivos). ) que nunca contiene caracteres problemáticos. Puedes simplificar lo anterior a:

$ 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/

información relacionada