如何移动旧日志 - mysql 日志

如何移动旧日志 - mysql 日志

我需要将旧的 binlog 移动到一个目录,然后在将其移动到新文件夹之前对其进行压缩。

由于空间紧张,我们面临着一些问题。

下面的命令不起作用。

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

答案1

如果您真的不想使用 logrotate,请使用find不解析的输出ls,同时打印出自 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/

上面假设 GNU coreutils,它接受-z( sortcuttail) 或-0( xargs) 使用 NUL 分隔行,这意味着即使文件名中包含换行符,代码也能正常工作。

如果您可以确定文件名中没有换行符,则事实证明您不需要使用 null ( \0) 终止每个找到的文件,因为您正在第一个字段(文件的上次修改时间)上按行排序)其中从不包含有问题的字符。您可以将上面的内容简化为:

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

相关内容