首页 > 解决方案 > 如何在 Linux 上将包含当前日期的文件名减去 1 天

问题描述

我有以下命令(有效):

for f in /home/backups/*; do mv -n "$f" "${f}_$(date -r "$f" +'%Y%m%d')"; done

例如:在/home/backups我有文件backup. 执行它重命名为backup_20180608(当前日期)的命令。

我希望减去 1 天。我的意思是文件应该是backup_20180607.

我怎样才能做到这一点?

标签: linux

解决方案


拆分以获得更好的可读性:

for f in /home/backups/*;
   do mv -n "$f" "${f}_$(date -d "$(date -r "$f") -1 days" +'%Y%m%d')";
done

重要的部分:

$(date -d "$(date -r "$f") -1 days" +'%Y%m%d')

来自 man date

-d,--日期=字符串

显示由 STRING 描述的时间,而不是“现在”

STRING将是由 报告的最后修改时间date -r "$f"

- 1 days从将格式化为的日期中减去一天%Y%m%d


用于复制和粘贴的单行:

for f in /home/backups/*; do mv -n "$f" "${f}_$(date -d "$(date -r "$f") -1 days" +'%Y%m%d')"; done

推荐阅读