В Linux есть команда wc
, которая может подсчитать количество строк в файле, например
wc -l /var/log/syslog
.Приведенный ниже скрипт bash сохраняет вывод команды wc -l
в файле с именем ./prevlinecount
.Всякий раз, когда вам нужны только новые строки в файле, он получает значение в ./prevlinecount
и вычитает это значение из нового экземпляра wc -l /var/log/syslog
, который называется newlinecount
.Тогда это tail
с (newlinecount - prevlinecount)
.
#!/bin/bash
prevlinecount=`cat ./prevlinecount`
if [ -z $prevlinecount ]; then
echo `wc -l $1 | awk '{ print $1 }' > ./prevlinecount`
tail -n +1 $1
else
newlinecount=`wc -l $1 | awk '{print $1}'`
tail -n `expr $newlinecount - $prevlinecount` $1
echo $newlinecount > ./prevlinecount
fi
Остерегайтесь Это очень элементарный скрипт, который может отслеживать только один файл.Если вы хотите расширить этот сценарий на несколько файлов, посмотрите ассоциативные массивы .С помощью ассоциативных массивов вы можете отслеживать несколько файлов, указав key
в качестве имени файла и value
в качестве количества предыдущих строк.
остерегайтесь , что со временем syslog
файлы могут быть заархивированы после того, как файл достигнет заранее определенного размера (возможно, 10 МБ), и этот сценарий не учитывает процесс архивирования.