これはほぼ終わりました。 CRONで実行して最後の10個のバックアップを維持し、他のアイテムを削除するスクリプト。すべてが正しいことを確認するために追跡するために記録したいと思います。作業して作成しました。どのファイルが削除されたのか、残念ながらタイムスタンプのプレフィックスを設定できません。
TIMESTAMP=$(date +%d-%m-%Y-%H-%M-%S)
LOGFILE="/home/user/place/backups/backuplog.txt"
echo "$TIMESTAMP, " | ls -1tr | head -n -10 | xargs -d '\n' rm -f -v >> $LOGFILE
答え1
ts
次のコマンドを使用できます。
ts [-r] [-i | -s] [format]
このように:
TS_FORMAT="%d-%m-%Y-%H-%M-%S, "
LOGFILE="/home/user/place/backups/backuplog.txt"
ls -1tr | head -n -10 | xargs -d '\n' rm -f -v | ts "${TS_FORMAT}" >> $LOGFILE
ts
含まれるmoreutils
パック。
更新:追加の依存関係をインストールする必要はありません。
以下を再利用できますxargs
。
TIMESTAMP=$(date +%d-%m-%Y-%H-%M-%S)
LOGFILE="/home/user/place/backups/backuplog.txt"
ls -1tr | head -n -10 | xargs -d '\n' rm -f -v | xargs -L 1 -d '\n' echo "${TIMESTAMP}, " >> $LOGFILE
もう1つの可能性は、以下を使用することですsed
。
TIMESTAMP=$(date +%d-%m-%Y-%H-%M-%S)
LOGFILE="/home/user/place/backups/backuplog.txt"
ls -1tr | head -n -10 | xargs -d '\n' rm -f -v | sed "s/^/${TIMESTAMP}/" >> $LOGFILE
使用awk
:
LOGFILE="/home/user/place/backups/backuplog.txt"
ls -1tr | head -n -10 | xargs -d '\n' rm -f -v | awk '{ print strftime("%d-%m-%Y-%H-%M-%S"), $0}' >> $LOGFILE
など。
答え2
私はこの問題に対してループベースのアプローチを提案したいのですが(私たち全員が一行を好むが)、読みやすくなります。もちろん、CRONではコードを直接実行するのではなく、このスクリプトファイルを呼び出すだけです。
strings=`ls -1tr | head -n -10`
for file in $strings; do
rmOutput=`rm -f -v $file`
echo `date +%d-%m-%Y-%M-%S`: $rmOutput >> $LOGFILE
done