古いログを移動する方法 - mysql ログ

古いログを移動する方法 - mysql ログ

古いバイナリログをディレクトリに移動し、新しいフォルダーに移動する前に圧縮する必要があります。

スペースが不足しているため、問題が発生しています。

以下のコマンドは機能しません。

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/

上記は、 NUL 区切りの行を使用するために-z( sortcutおよびtail) または-0( xargs) を受け入れる GNU coreutils を想定しています。つまり、ファイル名に改行があってもコードは正しく動作します。

ファイル名に改行文字が含まれていないことが確実な場合は、問題となる\0文字が含まれない最初のフィールド (ファイルの最終変更時刻) に基づいて行ごとに並べ替えているため、見つかった各ファイルを null ( ) で終了する必要がないことがわかります。上記を次のように簡略化できます。

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

関連情報