Как постоянно отслеживать файл, который постоянно перезаписывается? В частности, файл содержит одну строку текста, которую фоновый процесс постоянно открывает и перезаписывает.
Я надеялся, что tail -F
будет работать, но это не так.
Обновить: Я надеялся, что это не уместно, но я использую Mac OS X 10.5.8.
Вы можете использовать часы, чтобы повторить выполнение команды, поэтому в вашем случае
watch -n 1 cat filename
Есть способы сделать это лучше, но это сработает
while true ; do echo -n "`date +%s:` " >> file.log ; cat file >> file.log ; done
Файл file.log будет расти ... быстро ...
Если вам нужно больше функций, например, проверить, совпадает ли содержимое файла с предыдущим содержимым, вы можете развернуть это в скрипт. Просто прокомментируйте ниже, и я помогу.
В системах BSD (и я считаю, что в большинстве других систем) tail -f
вернется к началу файла, если увидит, что файл был усечен (это похоже на то, что вы хотите).
В системах Linux происходит то же самое, но, по крайней мере, в ящике Debian, который у меня лежит, у хвоста есть "интервал опроса", поэтому вам нужно указать ему не спать между проверками файла (tail -s 0 -f ...
), чтобы он заметил усечение, иначе происходят странные вещи (если файл такого же размера или меньше, когда он записан, вы не получите вывода, если он больше, вы получите все после текущего маркера счетчика байтов в хвосте и т. д. - Play с импедментацией хвоста, чтобы посмотреть, как он себя ведет)
В качестве альтернативы в системах Linux и BSD хвост имеет -F
вариант (который похож на -f
но проверяет, был ли файл повернут - т.е. имя указывает на другой номер inode). Это не поможет вам, если файл усекается, а не удаляется и заменяется.
Бедняк watch
:
while true
do
clear
cat file
sleep 1
done
Изменить cat
если файл длиннее экрана, на что-то вроде:
tail -n $((LINES - 4)) file
Вы можете добавить условия для проверки изменения метки времени файла и т. Д.
Вы можете использовать FSEvents API и небольшой сценарий для отслеживания файла (или, точнее, каталога, в котором находится файл).