BASHはタイムスタンプでrmの出力をどのように保存しますか?

BASHはタイムスタンプでrmの出力をどのように保存しますか?

これはほぼ終わりました。 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

など。

おすすめ記事