Проверьте дату файла с помощью bash

Я пытаюсь проверить, как старый файл был создан (в секундах) с помощью bash в инструкции if. Мне нужна дата создания, а не модификация.

У вас есть идеи, как это сделать, без использования команды типа find с grep?

Ответы

Ответ 1

Вот лучший ответ, который я нашел в настоящее время, но он только для времени модификации:

expr `date +%s` - `stat -c %Y /home/user/my_file`

Ответ 2

Боюсь, я не могу ответить на вопрос о времени создания, но для последнего времени модификации вы можете использовать следующее, чтобы получить дату эпохи, в секундах, так как последнее имя файла было изменено:

date --utc --reference=filename +%s

Итак, вы могли бы так что-то вроде:

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

и т.д..

Обновление Более эльгетичный способ сделать это (опять же, только измененное время): как я могу проверить bash, был ли файл создан больше, чем x времени назад?

Ответ 3

Если ваша система имеет stat:

modsecs=$(stat --format '%Y' filename)

И вы можете выполнить математику, как в ответе Joel.

Ответ 4

вы можете использовать ls с --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]} ))
}