我正在编写一个脚本,使用bash脚本查找文件创建/修改时间之间的差异。运行QNX我不能使用任何常见的主题日期功能,这将使这很容易。我正在接近从ls命令修改日期:
last=0
current=0
#ls -l /path/*.log | awk '{print $8}' | sed s/:/*60+/g | bc |
ls -l /path/*.log | awk '{print $8}' |
while read fname
do
current=$(fname | sed s/:/*60+/g | bc)
echo $current
echo $fname
if [ $last -gt 0 ]; then
echo "the difference is $($current - $last) minutes"
last=$current
else
last=$current
echo $fname
fi
done
第一个评论ls产生我需要的东西,以秒为单位的时间,虽然while语句不起作用,但是找不到基于整数的文件。如果我使用第二个ls命令,sed将不会修改基于hh:mm的日期,并且差异将不起作用。有什么想法吗?
答案 0 :(得分:0)
很少指向您的查询:
1.文件创建时间戳不存储在linux中。对于任何文件,仅存储访问时间,修改时间和更改时间。 [请参考https://stackoverflow.com/a/79824/2331887了解它们之间的差异。]
2.现在,重新考虑并确定您需要找到的时间戳差异。一个是最新的修改时间最好用于基于事实进行计算,只要内容被修改,另一个时间差异将是? [您正在寻找之前修改时间和最新修改时间之间的差异]
很少指向您的代码:
1. 长列表文件描述的第8个参数将输出
a) hh:mm 表示当前年份修改的文件和
b) yyyy 而不是 hh:mm 用于前几年修改过的文件。
因此,计算中会出现歧义。
解决方案:对于您希望根据 hh * 60 + mm 进行计算的情况,您可以使用ls --time-style='+%d-%m-%Y %H:%M' -l *.log | awk '{print $7}'
。此计算进一步不考虑不同的日期。
相反,为了计算时差,我建议使用stat -c %Y *.log
[提供上次修改时间(以秒为单位) Epoch (1970年1月1日午夜)]
2.代码中的错误很小。使用current=$(fname | sed s/:/*60+/g | bc);
更改current=$(echo $fname | sed s/:/*60+/g | bc);
请注意,只有当文件的修改日期相同时,才能提供正确的输出。