我需要一个 bash 脚本,在 cronjob 运行时创建不同的文件名。文件名应类似于file1
, file2
, file3
.例如,如果 11 月 1 日 Cron 运行,它应该创建file1
,对于 11 月 2 日,它应该创建file2
。
答案1
您从 cron 作业执行脚本这一事实是无关紧要的。该脚本只需要创建一个包含当天的值,并将其用作文件名。
获取一个月中的某一天并不像乍听起来那么简单。在 Linux 上的(版本 4.2+)中bash
,这可以通过以下方式完成
printf -v filename 'file%(%-e)T' -1
...其中%(...)T
是如何使用时间格式字符串来printf
格式化时间戳,以及哪里%e
是整数形式的月份日期。通常,%e
如果日期是单个数字日期,则将包含初始空格字符,但使用%-e
左对齐该数字以使空格消失。
但这在(某些)非 Linux 系统上不起作用,而是您得到的文件名file-e
。因此,在这些系统上,最好使用%d
来获取零填充的日期,例如08
、 或02
。如果您希望在列出文件名时在 shell 中很好地对文件名进行排序,那么这也是更好的选择。
printf -v filename 'file%(%d)T' -1
在具有较旧实现的系统上bash
,例如 macOS(除非bash
通过 Homebrew 安装了较新版本),您将需要调用date
外部命令:
printf -v filename 'file%s' "$(date +%d)"