文件时间的差异

时间:2013-06-10 18:15:37

标签: timestamp qnx difference

我正在编写一个脚本,使用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的日期,并且差异将不起作用。有什么想法吗?

1 个答案:

答案 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); 请注意,只有当文件的修改日期相同时,才能提供正确的输出。