我正在尝试测试在if
语句中使用 bash 创建文件的时间(以秒为单位)。我需要创建日期,而不是修改。
您知道如何在不使用find
with之类的命令的情况下执行此操作grep
吗?
恐怕我无法回答创建时间的问题,但是对于上次修改时间,您可以使用以下内容获取纪元日期,以秒为单位,因为文件名是上次修改的:
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 时间?
这是我目前找到的最佳答案,但仅适用于修改时间:
expr `date +%s` - `stat -c %Y /home/user/my_file`
如果您的系统有stat
:
modsecs=$(stat --format '%Y' filename)
您可以按照Joel的回答进行数学运算。
您可以将 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]} ))
}