Find out if file has been modified within the last 2 minutes

前端 未结 6 1714
栀梦
栀梦 2020-12-11 14:51

In a bash script I want to check if a file has been changed within the last 2 minutes.

I already found out that I can access the date of the last modification with <

相关标签:
6条回答
  • 2020-12-11 15:06

    I solved the problem this way: get the current date and last modified date of the file (both in unix timestamp format). Subtract the modified date from the current date and divide the result by 60 (to convert it to minutes).

    expr $(expr $(date +%s) - $(stat mail1.txt -c %Y)) / 60
    

    Maybe this is not the cleanest solution, but it works great.

    0 讨论(0)
  • 2020-12-11 15:08

    Here's an even simpler version that uses shell math over expr:

    SECONDS (for idea)

    echo $(( $(date +%s) - $(stat file.txt  -c %Y) ))
    

    MINUTES (for answer)

    echo $(( ($(date +%s) - $(stat file.txt  -c %Y)) / 60 ))
    

    HOURS

    echo $(( ($(date +%s) - $(stat file.txt  -c %Y)) / 3600 ))
    
    0 讨论(0)
  • 2020-12-11 15:08

    Here is a solution that will test if a file is older than X seconds. It doesn't use stat, which has platform-specific syntax, or find which doesn't have granularity finer than 1 minute.

    interval_in_seconds=10
    filetime=$(date -r "$filepath" +"%s")
    now=$(date +"%s")
    timediff=$(expr $now - $filetime)
    if [ $timediff -ge $interval_in_seconds ]; then
      echo ""
    fi
    
    0 讨论(0)
  • 2020-12-11 15:09

    Complete script to do what you're after:

    #!/bin/sh
    
    # Input file
    FILE=/tmp/test.txt
    # How many seconds before file is deemed "older"
    OLDTIME=120
    # Get current and file times
    CURTIME=$(date +%s)
    FILETIME=$(stat $FILE -c %Y)
    TIMEDIFF=$(expr $CURTIME - $FILETIME)
    
    # Check if file older
    if [ $TIMEDIFF -gt $OLDTIME ]; then
       echo "File is older, do stuff here"
    fi
    

    If you're on macOS, use stat -t %s -f %m $FILE for FILETIME, as in a comment by Alcanzar.

    0 讨论(0)
  • 2020-12-11 15:17

    I think this would be helpful,

    find . -mmin -2 -type f -print
    

    also,

    find / -fstype local -mmin -2
    
    0 讨论(0)
  • 2020-12-11 15:20

    Here is how I would do it: (I would use a proper temp file)

    touch -d"-2min" .tmp
    [ "$file" -nt .tmp ] && echo "file is less than 2 minutes old"
    
    0 讨论(0)
提交回复
热议问题