根据日期范围

时间:2017-11-18 00:34:51

标签: bash datetime automation

如何在Bash中执行几行代码来完成以下操作。我试图在Bash中建立自己的技能,并学习如何从命令行处理更多小任务目录。

步骤:

  1. 指定开始日期和结束日期。将包括开始日期和结束日期在内的所有日期加载到"列表"

  2. 循环遍历列表,每次都创建一个这样的文件。 (需要日期格式化)

    2017-11-10.w
    2017-11-11.w
    2017-11-12.w
    

1 个答案:

答案 0 :(得分:1)

您可以将输入日期转换为Unix时间戳,然后添加每天的秒数和touch以结果命名的文件,直到您超过结束日期:

#!/bin/bash

startstamp=$(date -d "$1" +'%s')
endstamp=$(date -d "$2" +'%s')

secs_per_day=$(( 24 * 3600 ))

for (( thedate = startstamp; thedate <= endstamp; thedate += secs_per_day )); do
    touch "$(date -d "@$thedate" '+%F.w')"
done

%s格式化字符串(GNU扩展名)打印自Unix纪元以来的秒数,而@选项的参数中的-d表示日期在格式。 %F%Y-%m-%d的缩写,可转换为YYYY-MM-DD。

使用示例:

$ ./dates 2017-11-10 2017-11-15
$ ls -1
2017-11-10.w
2017-11-11.w
2017-11-12.w
2017-11-13.w
2017-11-14.w
2017-11-15.w
dates