2

I am writing a script to find the difference between file creation/modification times using a bash script. Running QNX I cannot use any common themed date functions that would make this easy. I am currently approaching this modifying the date from the ls command:

    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

the first commented ls produces what I need, the time in seconds, the while statement doesnot work though, not being able to find an integer based file. If I use the second ls command the sed will not modify the hh:mm based date and the difference won't work. Any ideas?

4

1 回答 1

0

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

您的代码几点:
1.第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);
正确的输出,仅当文件的修改日期相同时。

于 2013-06-10T19:46:11.880 回答