【问题标题】:Difference in file time文件时间的差异
【发布时间】:2013-06-10 18:15:36
【问题描述】:

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

【问题讨论】:

    标签: timestamp qnx difference


    【解决方案1】:

    您的查询要点:
    1.文件创建时间戳不存储在linux中。对于任何文件,仅存储访问时间修改时间更改时间。 [参考https://stackoverflow.com/a/79824/2331887了解它们之间的区别。]
    2. 现在,重新考虑并决定您需要找到哪个时间戳差异。一个是最新的修改时间最好用于基于事实的计算只要内容被修改,另一个时间的差异是? [您是否在寻找先前修改时间和最近修改时间之间的差异]

    您的代码有几点:
    1. long listing文件描述的第8个参数会输出
    a) hh:mm 表示当年修改过的文件,
    b) yyyy 而不是 hh:mm 用于前几年修改的文件。
    因此,您的计算中会出现歧义。

    解决方案:您可以使用ls --time-style='+%d-%m-%Y %H:%M' -l *.log | awk '{print $7}' 来计算您想要基于hh*60+mm 的情况.此计算进一步不考虑不同的日期。
    相反,为了计算时差,我建议使用 stat -c %Y *.log [ 它提供自 Epoch 以来的最后修改时间(以秒为单位(1970 年 1 月 1 日午夜) ]

    2. 你的代码中的错误非常小。将 current=$(fname | sed s/:/*60+/g | bc); 更改为 current=$(echo $fname | sed s/:/*60+/g | bc);
    请注意,这将提供正确的输出,仅当文件的修改日期相同时。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-04
      • 2011-10-28
      • 2015-06-27
      • 1970-01-01
      • 2018-06-21
      • 1970-01-01
      • 1970-01-01
      • 2014-01-23
      相关资源
      最近更新 更多