我几乎已经完成了这个工作,这是一个将在 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
另一种可能性是使用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