
Estoy usando el siguiente comando para leer la última línea cada vez que cambia el archivo.
tail -f -n1 Entrie.txt
Pasa que la primera linea escrita lo muestra sin problemas, pero luego cuando escribo la segunda me tira el siguiente error
tail: Entrie.txt: file truncated
Después de mostrar ese error, muestra todos los valores escritos en el archivo. Pero no es solo eso, después de escribir muchas líneas el error deja de salir y se soluciona, sino que necesito que funcione siempre bien.
Estoy ejecutando este comando en Linux.
Estoy agregando líneas al archivo en un editor y guardándolo.
Respuesta1
Puede modificar el archivo escribiendo una nueva versión del mismo o agregando datos a la actual.
Ejemplo en shell:
date > sample_file.txt
- recrea el archivo con texto nuevo (salida deldate
comando)date >> sample_file.txt
- agrega texto al archivo actual
Primer caso: su archivo ha sido truncado (contenido eliminado y recreado, se puede hacer con una simple "escritura" en el editor de texto) y tail
advierte sobre esto. Segundo caso: tail
funciona como pretendía.
Respuesta2
Cuando un editor de texto guarda un archivo, lo que sucede muy a menudo es que lo guarda en untemporarioarchivo, vacía (trunca) el archivo original y copia el contenido del archivo temporal al archivo original. Lo hace para no alterar los permisos, la propiedad y otros metadatos del archivo original.
Esto significa que desde la perspectiva de tail
, el archivo se trunca (se vacía), por lo que comienza a mostrar la última línea del archivo.mientras el editor lo está reescribiendo(es por eso que muestra el archivo completo).
Para agregar líneas al archivo de tal manera que su tail
comando siempre muestre solo la última línea del archivo y nada más, deberá asegurarse deadjuntarlíneas al archivo. Dado que los editores de texto generalmentevolver a escribirel archivo, es posible que tengas que hacerlo por otros medios.
Una forma muy básica de agregar datos a un archivo es mediante cat
:
cat >>Entrie.txt
Esto haría que cat
se agregue al archivo Entrie.txt
. Esperará su entrada y podrá escribir directamente en el archivo desde la terminal. La línea actual se escribe al final del archivo tan pronto como presiona Enter. Para dejar de ingresar datos, presione Ctrl+Den una línea vacía.
Obviamente, esto no le da ninguna oportunidad de corregir lo que ha escrito en las líneas anteriores una vez que presiona Enter.
Otra alternativa sería editar las nuevas líneas en un archivo separado, por ejemplo additions.txt
, con su editor. Guarde ese archivo y luego haga
cat additions.txt >>Entrie.txt
Esto agregaría el contenido completo de additions.txt
al final del archivo Entrie.txt
.