BASH如何用时间戳保存rm的输出?

God*_*ead 2 shell bash shell-script

我几乎已经完成了这个工作,这是一个将在 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
Run Code Online (Sandbox Code Playgroud)

zua*_*azo 5

您可以使用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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

另一种可能性是使用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
Run Code Online (Sandbox Code Playgroud)

使用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
Run Code Online (Sandbox Code Playgroud)

等等。