於 Linux bash shell 要計算兩個日期的差異,然後將此日期之後有修改的檔案印出來,要怎麼做呢?
Linux Shell 找出指定日期之後 有修改的檔案
主要是在做備份的時候,偶爾插入一顆硬碟,想要每次只有把沒備份的檔案列出來,就是紀錄此次的日期,下次備份的時候,find 再把差距的時間列出來,就可以做檔案備份。
- 註:一般備份應該隨資料重要性,定期的自動備份,此備份方式是備份些重要性沒那麼高,自己的資料用得。
Shell script 計算日期差距的 Function
- $ date -d "2018-02-08" +%s # 可以將日期轉成 timestamp
1518019200
所以兩個日期相減,計算天數,可以寫成下述的 function,可以直接寫在 .bashrc 裡面
- vim .bashrc
datediff() { d1=$(date -d "$1" +%s) d2=$(date -d "$2" +%s) echo $(( (d1 - d2) / 86400 )) days }
- $ datediff "2018-02-08" "2018-02-11" # 測試
-3 days - $ datediff '1 Nov' '1 Aug' # 測試
91 days
使用 find 找出時間區間有修改的檔案
- find ./ -mtime -1 -print # 找出一天內有修改的檔案
使用 datediff + find 列出某天之後,有修改的檔案清單
- find ./ -mtime `datediff "2018-02-08" "2018-02-11"` -print
- now=`date "+%Y-%m-%d"`; find ./ -mtime `datediff "2018-02-08" $now` -print # 找出從某天開始,到今天有修改的檔案有哪些