17

我正在尝试测试在if语句中使用 bash 创建文件的时间(以秒为单位)。我需要创建日期,而不是修改。

您知道如何在不使用findwith之类的命令的情况下执行此操作grep吗?

4

4 回答 4

24

恐怕我无法回答创建时间的问题,但是对于上次修改时间,您可以使用以下内容获取纪元日期,以为单位,因为文件名上次修改的:

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

ETC..

更新 一种更优雅的方式(同样,仅修改时间):如何在 bash 中检查文件是否创建时间超过 x 时间?

于 2009-11-30T11:35:18.177 回答
8

这是我目前找到的最佳答案,但仅适用于修改时间:

expr `date +%s` - `stat -c %Y /home/user/my_file`
于 2009-11-30T18:14:55.343 回答
2

如果您的系统有stat

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

您可以按照Joel的回答进行数学运算。

于 2009-11-30T14:12:51.367 回答
1

您可以将 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]} ))
}  
于 2009-11-30T12:29:14.903 回答