通过终端创建并发文件夹

通过终端创建并发文件夹

我想制作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格式),标准排序就会变得不稳定。

相关内容