меньше с «файлом обновления», как функциональность


9

Я хочу посмотреть файл, который перезаписывается каждые 5 минут less. Как я могу заставить lessследовать новому дескриптору файла вместо сохранения старого? watch "cat file"не будет делать это, потому что файл слишком длинный, чтобы поместиться в одном окне терминала.


2
«Follow» подразумевает следующий за концом файла. Вы можете уточнить, что ваш файл перезаписан, и вы заинтересованы в его открытии.
Chutz

Я имел в виду следующий за файловым дескриптором, как это определено в tail -fсправочной странице. Но тем не менее я прояснил свой вопрос.
d135-1r43

Используйте less --follow-nameсм. Unix.stackexchange.com/a/74287/112522
djsutho

Ответы:


10

Вы можете получить этот эффект, введя Fкоманду ( Shift+F) при просмотре файла в less. Чтобы прекратить подписку и вернуться к пейджингу, нажмитеCtrl+C

Поскольку ваш файл изменяется только каждые 5 минут, вы также можете использовать tail -fи указать более длительное время -sожидания с помощью (по умолчанию 1 секунда). Например,

tail -f -s 60 myfile

проверяет myfileвывод каждые 60 секунд.

РЕДАКТИРОВАТЬ: из-за вводящего в заблуждение вопроса, приведенный выше ответ был неудовлетворительным. Вторая попытка следует:

Чтобы повторно открывать один и тот же файл lessкаждые 5 минут, попробуйте следующее:

while true; do ( sh -c 'sleep 600 && kill $PPID' & less myfile ); done

Это порождает подоболочку, которая создает фон для другого процесса оболочки, которому предписано завершить родительский процесс через 5 минут. Затем он открывает файл с less. Когда команда фоновой оболочки убивает родительский подоболочек, она убивает всех его дочерних элементов, включая команду "less". Затем цикл запускает процесс заново.

Единственный простой способ уничтожить это - убить терминал, в котором находится ваша оригинальная оболочка. Если это недопустимо, вы можете использовать трюк «killfile»:

touch killfile
while [ -f killfile]; do stuff; done

Чтобы прекратить делать stuff, rmkillfile в другой оболочке.


Это только частично полезно для моего случая. Просматриваемый файл очень большой, обновленная информация вверху. Это не "прокрутка" файла журнала. Shift + F сразу прокручивает до конца файла ...
d135-1r43

Вы должны отредактировать свой вопрос, чтобы уточнить. Я отредактировал свой ответ, чтобы ответить и на это.
Бонсайвинг

watch -n 1 less <filename>
axel22

1

Вы можете сделать что-то подобное в vim.

Начать сеанс сервера vim:

vim -R --servername refresh_session

Затем в другой консоли просмотрите файл на наличие обновлений и сообщите сеансу vim перезагрузить файл, как только он будет обновлен:

inotifywait -e close_write -m your_log_file | while read filename events; do
    vim --servername refresh_session --remote $filename
done

Несколько ошибок.

  • Это, конечно, не будет работать, если вы vimне скомпилированы с clientserverфункцией в.
  • inoifywaitперестанет работать, когда файл будет удален. Поэтому я надеюсь, что ваш файл будет перезаписан. Конечно, обойти это тоже можно.

И если вы хотите иметь более lessпохожий опыт, вы можете использовать lessмакросы для lessпривязки клавиш vim.

/usr/share/vim/vim73/macros/less.sh --servername refresh_session

0

Я нашел старую, но очень хорошую «менее» похожую программу («пейджер»). У него есть команда «R», которая обновляет файл.

Он называется "lv". Вы можете установить его на Ubuntu используя:

sudo apt install lv

Тем не менее, похоже, нет функции автозагрузки.



-1

Хвост твой друг. "tail -f filename" покажет вам новые строки, когда они появятся.

Или, если вы ищете изменения, сделанные в середине файла, возможно, запускаете скрипт каждые несколько минут, чтобы сделать копию файла во временную папку и выполнить ее различие?


Даже в оригинальном сообщении было совершенно ясно, что существует «новый файл». Поэтому дескриптор файла изменился tail -fбы, но все равно прочитал бы старый.
Аластер Ирвин

Я не думаю, что это очень справедливо. Чтобы быть кристально чистыми, нам нужно взглянуть на оригинальный, неотредактированный пост, потому что, если вы посмотрите на дату моего ответа, это вопрос, на который я отвечал. В этом неотредактированном вопросе мой ответ имеет смысл. serverfault.com/posts/445899/revisions
Дэвид W

Я проверил ревизии. Ключевые слова "новый файл".
Аластер Ирвин
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.