
古いバイナリログをディレクトリに移動し、新しいフォルダーに移動する前に圧縮する必要があります。
スペースが不足しているため、問題が発生しています。
以下のコマンドは機能しません。
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 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/