2016-12-08 37 views
1

我正在嘗試編寫一個crontab,它檢查某個指定目錄內部並檢查這些文件是否超過一個小時。布爾檢查文件是否在過去一小時內被打開

!#/bin/bash 
for F in /My/Path/*.txt;do 
    if [ ***TEST IF FILE WAS OPENED IN THE PAST HOUR *** ] 
     then 
      echo "$F" 
     fi 
    done 

感謝您的幫助

+0

只需使用找到'找到/我的/路徑/ -name「* .TXT '-mmin + 30' – 123

+1

請記住,在某些情況下,此信息可能根本不可用(例如,如果文件系統是使用noatime裝入的)。 – FatalError

回答

0

使用GNU date更嚴格的方法,其中有一個選項-r

-r, --reference=FILE 
     display the last modification time of FILE 

使用上面,在你的腳本結合

#!/bin/bash 
for filename in /My/Path/*.txt ; do 
    if (((($(date +%s) - $(date -r "$filename" +%s))/60) <= 60)); then 
     echo "$filename" 
    fi 
done 

的邏輯很直接,我們正在修改文件通過用當前時間減去文件的修改EPOCH來以分鐘爲單位的時間。如果文件在60 minutes內被修改,則打印特定文件。

1

這可以用一個簡單的完成找到

find /path/to/directory -type f -newermt "1 hours ago" 

訪問/任何文件在過去一小時內修改將打印到標準輸出。無需循環和打印。

#/bin/bash 
OLD_FILES=$(find /path/to/directory -type f -newermt "1 hours ago") 
if [[ -n $OLD_FILES ]]; then 
    echo "$OLD_FILES" 
else 
    echo "No old files found in dir" 
fi 

你總是可以管的結果到一個日誌文件,如果你嘗試編譯列表以及

find /path/to/directory -type f -newermt "1 hours ago" >> $yourLogFile