
Я использую следующую команду для чтения последней строки каждый раз при изменении файла.
tail -f -n1 Entrie.txt
Бывает, что первая написанная строка отображается без проблем, но позже, когда я пишу вторую, выдается следующая ошибка
tail: Entrie.txt: file truncated
После того, как показывается эта ошибка, он показывает все значения, записанные в файле. Но дело не только в том, что после записи многих строк ошибка перестает вылезать и исправляется, но мне нужно, чтобы он всегда работал хорошо.
Я запускаю эту команду в Linux.
Я добавляю строки в файл в редакторе и сохраняю.
решение1
Вы можете изменить файл, записав новую его версию или добавив данные к текущей.
Пример в оболочке:
date > sample_file.txt
- воссоздает файл с новым текстом (выводdate
команды)date >> sample_file.txt
- добавляет текст в текущий файл
Первый случай - ваш файл был обрезан (контент удален и создан заново, это можно сделать простым "написанием" в текстовом редакторе) и tail
предупреждает об этом. Второй случай - tail
работает так, как вы и предполагали.
решение2
Когда текстовый редактор сохраняет файл, очень часто происходит следующее: он сохраняет его ввременныйfile, очищает (обрезает) исходный файл и копирует содержимое из временного файла в исходный файл. Это делается для того, чтобы не изменять разрешения, владельца и другие метаданные исходного файла.
Это означает, что с точки зрения tail
, файл обрезается (очищается), поэтому он начинает показывать последнюю строку файлатак как редактор переписывает его(вот почему он отображает весь файл).
Чтобы добавить строки в файл таким образом, чтобы ваша tail
команда всегда отображала только последнюю строку файла и ничего больше, вам придется убедиться, чтодобавитьстроки в файл. Поскольку текстовые редакторы обычнопереписатьфайл, вам, возможно, придется сделать это другими способами.
Самый простой способ добавления данных в файл — это использование cat
:
cat >>Entrie.txt
Это сделает cat
добавление в файл Entrie.txt
. Он будет ждать ввода от вас, и вы сможете печатать прямо в файле с терминала. Текущая строка записывается в конец файла, как только вы нажмете Enter. Чтобы прекратить ввод данных, нажмите Ctrl+Dна пустой строке.
Однако это, очевидно, не дает вам возможности исправить то, что вы написали в предыдущих строках, после нажатия кнопки Enter.
Другой альтернативой было бы редактирование новых строк в отдельном файле, скажем additions.txt
, с помощью вашего редактора. Сохраните этот файл и затем выполните
cat additions.txt >>Entrie.txt
Это добавит все содержимое additions.txt
в конец файла Entrie.txt
.