Dear all,
I am trying to test how old ago a file was created (in secondes) with bash in a "if" statement. I need creation date, not modification.
Do you have any idea how to do this, without using a command like "find" with grep ?
Dear all,
I am trying to test how old ago a file was created (in secondes) with bash in a "if" statement. I need creation date, not modification.
Do you have any idea how to do this, without using a command like "find" with grep ?
I'm afraid I cann't answer the question for creation time, but for last modification time you can use the following to get the epoch date, in seconds, since filename was last modified:
date --utc --reference=filename +%s
So you could then so something like:
modsecs=$(date --utc --reference=filename +%s)
nowsecs=$(date +%s)
delta=$(($nowsecs-$modsecs))
echo "File $filename was modified $delta secs ago"
if [ $delta -lt 120 ]; then
# do something
fi
etc..
Update A more elgant way of doing this (again, modified time only): http://stackoverflow.com/questions/552724/how-do-i-check-in-bash-whether-a-file-was-created-more-than-x-time-ago
Date of creation isn't stored on many often used filesystems. What filesystem do you use?
you can use ls with --full-time
file1="file1"
file2="file2"
declare -a array
i=0
ls -go --full-time "$file1" "$file2" | { while read -r a b c d time f
do
time=${time%.*}
IFS=":"
set -- $time
hr=$1;min=$2;sec=$3
hr=$(( hr * 3600 ))
min=$(( min * 60 ))
totalsecs=$(( hr+min+sec ))
array[$i]=$totalsecs
i=$((i+1))
unset IFS
done
echo $(( ${array[0]}-${array[1]} ))
}
If your system has stat
:
modsecs=$(stat --format '%Y' filename)
And you can do the math as in Joel's answer.
Here is the best answer I found at the time being, but it's only for the modification time :
expr `date +%s` - `stat -c %Y /home/user/my_file`