古い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を使用して-z
(sort
、cut
およびtail
)または-0
(xargs
)を許可する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/