Linux Shell 找出指定日期之後 有修改的檔案

於 Linux bash shell 要計算兩個日期的差異,然後將此日期之後有修改的檔案印出來,要怎麼做呢?

Linux Shell 找出指定日期之後 有修改的檔案

主要是在做備份的時候,偶爾插入一顆硬碟,想要每次只有把沒備份的檔案列出來,就是紀錄此次的日期,下次備份的時候,find 再把差距的時間列出來,就可以做檔案備份。

  • 註:一般備份應該隨資料重要性,定期的自動備份,此備份方式是備份些重要性沒那麼高,自己的資料用得。

Shell script 計算日期差距的 Function

  • $ date -d "2018-02-08" +%s # 可以將日期轉成 timestamp
    1518019200

所以兩個日期相減,計算天數,可以寫成下述的 function,可以直接寫在 .bashrc 裡面

  1. vim .bashrc
    datediff() {
        d1=$(date -d "$1" +%s)
        d2=$(date -d "$2" +%s)
        echo $(( (d1 - d2) / 86400 )) days
    }
  2. $ datediff "2018-02-08" "2018-02-11" # 測試
    -3 days
  3. $ 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 # 找出從某天開始,到今天有修改的檔案有哪些

相關網頁

作者: Tsung

對新奇的事物都很有興趣, 喜歡簡單的東西, 過簡單的生活.

發表迴響

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料