2013-06-10 4 views
2

Я пишу скрипт, чтобы найти разницу между временем создания файла/модификации с использованием сценария 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 производит то, что мне нужно, время в секундах, оператор в то время как оленья кожа работа, хотя, не будучи в состоянии найти файл целое на основе , Если я использую вторую команду ls, sed не будет изменять дату hh: mm, и разница не будет работать. Есть идеи?

ответ

0

Несколько точек на Ваш запрос: создание
1. Файл метка времени не хранятся в Linux. Только Доступное время, изменение времени и изменение времени хранятся для любого файла. [обратитесь к https://stackoverflow.com/a/79824/2331887 за различия между ними.]
2. Теперь передумайте и определите, какую временную разницу вам нужно найти. Один из них был бы последним измененным временем было бы лучше всего использовать для расчета на основе факта всякий раз, когда контент будет изменен, а в другой раз для разницы будет? [Вы ищете разницу между предыдущим измененном временем и последним измененное временем]

Несколько точек в код:
1. 8 параметр длинного список описания файла будет выводить
а) чч: мм для файлов, которые были изменены в текущем году и
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 (в полночь 1.1.1970)]

2. ошибка в коде очень мало. Изменение current=$(fname | sed s/:/*60+/g | bc); с current=$(echo $fname | sed s/:/*60+/g | bc);
Обратите внимание, что это обеспечило бы правильный вывод только и только в том случае, если измененные даты для файла совпадают.