2017-11-18 174 views
0

如何在Bash中执行几行代码来完成以下操作。我试图在Bash中建立我的技能,并学习如何从命令行处理更多的小任务目录。根据日期范围创建一组文件

步骤:

  1. 指定的开始日期和结束日期。将包含开始日期和结束日期之间的所有日期加载到“列表”中

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

    2017-11-10.w 
    2017-11-11.w 
    2017-11-12.w 
    
+0

Bash是不是管理日期很大。我会用Perl或其他更“高级”的语言来做,而不是bash。我的2美分。你试过什么,研究什么? – Nic3500

回答

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