2017-11-18 173 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