古いログを移動する方法 - 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/

上記は、行を区切るためにNULを使用して-zsortcutおよびtail)または-0xargs)を許可するGNUコアutilsを想定しています。つまり、ファイル名に改行文字が含まれていてもコードが機能することを意味します。

ファイル名に改行文字がないと確信できれば、\0最初のフィールド(ファイルの最後の修正時間)で一行ずつソートするため、見つかった各ファイルを null( ) 終了する必要がないことがわかりました。ここにfrom問題のある文字は含まれていません。上記の内容は次のように単純化できます。

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

関連情報