Повторно открыть усеченный файл, следуя за файлом с меньшим

Иногда я бегу less +F на файл журнала, который я затем усекаю. мне бы хотелось less понять, что файл был усечен и начать следовать за файлом, как сейчас. В настоящее время я вынужден сделать следующее:

  1. (терминал 1) > less +F my-file.txt
  2. (терминал 2)> printf "" > my-file.txt
  3. (терминал 1) > выйти меньше
  4. (терминал 1) > перезапустить меньше: less +F my-file.txt

И я должен делать шаги 3-4 каждый раз, когда я обрезаю файл (это десятки раз в день). Это действительно боль.

Я хотел бы сделать:

  1. (терминал 1) > less +F my-file.txt (и любой дополнительный параметр необходим)
  2. (терминал 2)> printf "" > my-file.txt

И это все. less будет автоматически знать, что файл был усечен, и начнет следовать за новым файлом с самого начала.

Это возможно? Какой флаг я должен использовать для меньшего, чтобы достичь этого?

3 ответа

Не совсем тот ответ, который вы искали, но вы можете попробовать использовать "tail -F" (в отличие от "tail -f"), который даст вам именно то поведение, которое вы ищете.

Вы хотите указать --follow-name аргумент less, Со страницы руководства:

Обычно, если входной файл переименовывается во время выполнения команды F, less будет продолжать отображать содержимое исходного файла, несмотря на изменение его имени. Если указано --follow-name, во время команды F less будет периодически пытаться открыть файл по имени. Если повторное открытие выполнено успешно, и файл отличается от исходного (это означает, что новый файл был создан с тем же именем, что и исходный (теперь переименованный) файл), less отобразит содержимое этого нового файла.

Итак, ваши шаги теперь будут:

  1. (терминал 1) > less --follow-name +F my-file.txt
  2. (терминал 2)> printf "" > my-file.txt
  3. (терминал 1) > наслаждайтесь!

PS Вместо printf многие оболочки будут обрезаться только с помощью оператора перенаправления: > my-file.txt

Почему бы вам не объединить их так?

tail -F filename | tee | less

Это хорошо работает для меня.

Другие вопросы по тегам