我想制作crontab
并发文件夹,如下所示:每周一选项卡必须创建一个新文件夹,但必须添加数字,否则会相互覆盖。
这些数字可以是每个星期一的日期。
--
Week one makes folder:
Monday_01
--
Week two makes folder:
Monday_02
--
Week three makes folder:
Monday_03
--
在网上找不到任何有关它的信息。
答案1
有几种可能性。由于对我来说,不断增加的充满“Monday_”的目录不太容易导航,因此我可能会设置类似的内容(更改tmp
为所需的基本目录):
1 0 * * 1 mkdir -p "/tmp/$(date +%Y)/$(date +%A)_$(date +%V)"
所以我会得到以下结果:
2020/
Monday_01
Monday_02
etc.
其中数字对应于周数。这样,我就可以按年份列出目录,而数字本身就会传达一些积极的信息。
下一个最佳方法是用自己选择的语言编写脚本,并使用脚本功能来解析数字并递增它。这种方法还可以处理格式的一些潜在问题(当累积的目录达到> 99时会发生什么?然后它将是_100,我认为标准排序将开始变得混乱),以及提供(可能)更好的错误处理。
cron
如果必须停留在(嗯,确实如此)的领域,那么这种方法应该可行,尽管与编写脚本相比,它会大大减少错误检查。
val=$(/bin/ls -1rtd /tmp/Monday_* | tail -n1 | cut -d'_' -f2) \
&& printf -v nv "%02d" $((10#$val + 1)) \
&& mkdir "/tmp/Monday_$nv"
这是通过找到最新的1 个“Monday_*”目录(调整“/tmp”作为基本目录),在下划线字符(“_”)上分割,格式化递增的值(同样,不确定一旦一个目录应该发生什么)来工作的。达到 99),然后创建目录。需要10#
避免引入0
值的问题(否则会被解释为八进制)。
一些示例输出,以及标准排序的不稳定:
/tmp/Monday_01/
/tmp/Monday_02/
/tmp/Monday_03/
/tmp/Monday_04/
/tmp/Monday_05/
/tmp/Monday_06/
/tmp/Monday_07/
/tmp/Monday_08/
/tmp/Monday_09/
/tmp/Monday_10/
/tmp/Monday_100/
/tmp/Monday_101/
/tmp/Monday_102/
/tmp/Monday_103/
/tmp/Monday_104/
/tmp/Monday_105/
/tmp/Monday_106/
/tmp/Monday_107/
/tmp/Monday_108/
/tmp/Monday_109/
/tmp/Monday_11/
使用相同的 cron 格式 (1 0 * * 1) 在每周一早上午夜过后 1 分钟调用此函数。
1此处,最新是由创建时间定义的。由于要求是每周一创建一个新目录,所以使用最晚的时间应该可以。如前所述,一旦文件超过 99 个(如果使用%02
格式),标准排序就会变得不稳定。