为了找到一个锁文件的年代,我编写了下一个脚本:

#!/bin/bash
now=`date +"%T"`
lock="aggregator.lock"
find . -name $lock -type f
if [ $? != 0 ];
        then
        exit
else
ls -ltrh $lock 2&>/dev/null
fi
if [ $? != 0 ];
        then
        locktime=`ls -ltrh aggregator.lock |awk -F" " '{print $7}'`
else
echo "File not found"
fi

我有两个问题:
ls -ltrh aggregator.lock |awk -F" " '{print $7}'的输出
以HH:MM而不是HH:MM:SS格式给出时间和输出
的格式为HH:MM:SS(根据需要),因此
如何用秒计算文件的修改时间?
我不知道如何在时间之间减去。。。为了得到两个变量之间的秒增量,我想做一些类似于date +"%T"的事情,怎么做呢?
编辑:
脚本的意义是查找锁文件存在多长时间…
这里有一个脚本:
device0="/home/build/aggregator/scripts/aggregator.lock"
if [ -e "$device0" ]
then
echo process is allready running
else

touch $device0
java -Xms6g  -Xmx6g -jar /home/build/aggregator/aggregator-1.0-SNAPSHOT-jar-with-dependencies.jar
rm $device0
fi

创建锁文件。。。创建锁文件的唯一目的是让我知道脚本的运行时间有多长,只是认为还需要这些信息,因为我不想知道自上次修改文件以来经过了多少时间。
提前谢谢

最佳答案

要了解上次修改文件的时间,可以使用

stat -c %Y file

以秒为单位显示自the epoch以来时间的最后修改日期,以及
date +%s

以相同的单位显示当前日期。然后简单地用$(( ... ))减去它们,就会得到自上次修改文件以来经过的秒数。注意,Unix文件系统通常不存储创建日期,只存储最后的访问/更改/修改日期。
要转换回人类可读格式,请参见例如https://stackoverflow.com/a/12199798/2907484
所以基本上:
now=$(date +%s)
was=$(stat -c%Y file)
elapsed=$((now - was))
days=$((elapsed/86400))
hours=$(( (elapsed-days*86400)/3600 ))
mins=$(( (elapsed-days*86400 - hours*3600)/60 ))
secs=$(( elapsed - days*86400 - hours*3600 - mins*60 ))

现在您可以根据需要用echoprintf格式化输出
printf '%02dd:%02dh:%02dm:%02ds\n' $days $hours $mins $secs

将输出
00d:18h:42m:27s

可能格式%02d不太适合几天——但你有主意了。你也可以轻松地增加周、年或其他。
要查看脚本/程序运行所用的时间,可以使用bash内置命令time或实用程序/usr/bin/timebe sure to not confound them),也可以使用以下方法遵循此脚本中的思想:
was=$(date +%s)
...run your script...
now=$(date +%s)

继续上面的。

09-10 00:13
查看更多