我使用以下命令在每次文件更改时读取最后一行。
tail -f -n1 Entrie.txt
碰巧写的第一行显示它没有问题,但后来当我写第二行时它会抛出以下错误
tail: Entrie.txt: file truncated
显示该错误后,它显示了文件中写入的所有值。但不仅如此,在写了很多行之后,错误就不再出现并被修复,而且我需要它始终工作良好。
我在 Linux 中运行这个命令。
我正在编辑器中向文件添加行并保存。
答案1
您可以通过写入新版本或将数据附加到当前版本来修改文件。
外壳中的示例:
date > sample_file.txt
- 使用新文本重新创建文件(date
命令的输出)date >> sample_file.txt
- 将文本附加到当前文件
第一种情况 - 您的文件已被截断(内容被删除并重新创建,可以通过在文本编辑器中简单的“写入”来完成)并tail
对此发出警告。第二种情况 -tail
按您的预期工作。
答案2
当文本编辑器保存文件时,经常发生的情况是将其保存到暂时的文件,清空(截断)原始文件,并将临时文件中的内容复制到原始文件中。这样做是为了不改变原始文件的权限、所有权和其他元数据。
这意味着从 的角度来看tail
,文件被截断(清空),因此它开始显示文件的最后一行因为编辑正在重写它(这就是它显示整个文件的原因)。
要将行添加到文件中,使tail
命令始终仅显示文件的最后一行而不显示其他内容,您必须确保附加行到文件。由于文本编辑器通常改写文件,您可能必须使用其他方式来执行此操作。
将数据附加到文件的一个非常基本的方法是使用cat
:
cat >>Entrie.txt
这将cat
追加到文件中Entrie.txt
。它会等待您的输入,您可以直接从终端输入文件。按 后,当前行将立即写入文件末尾Enter。要停止输入数据,请Ctrl+D按空行。
显然,一旦您按下,这显然不会给您任何机会来更正您在前几行中所写的内容Enter。
另一种选择是使用additions.txt
编辑器在单独的文件(例如 )中编辑新行。保存该文件然后执行
cat additions.txt >>Entrie.txt
这会将 的完整内容添加additions.txt
到文件末尾Entrie.txt
。