Esto se debe a que bash procesa la redirección con la >
primera, eliminando el contenido del archivo. Luego ejecuta el comando. Si usara >>
, las últimas 50 líneas se agregarían al final de lo que está actualmente en el archivo. En este caso, tendría las mismas 50 líneas repetidas dos veces.
El comando funciona como se espera al redirigir a un archivo diferente. Aquí hay una forma de escribir las últimas 50 líneas de un archivo en un archivo con el mismo nombre:
tail -50 /home/pi/Documents/test > /home/pi/Documents/test2 && mv /home/pi/Documents/test2 /home/pi/Documents/test
Esto primero escribe las últimas 50 líneas en un archivo temporal, que luego se mueve mv
para reemplazar el archivo original.
Como se señaló en los comentarios, esto no funcionará si el archivo aún está abierto. Mover el archivo también crea un nuevo inodo y puede cambiar la propiedad y los permisos. Una mejor manera de hacer esto usando un archivo temporal sería:
tail -50 /home/pi/Documents/test > /home/pi/Documents/test2 ; cat /home/pi/Documents/test2 > /home/pi/Documents/test
El archivo temporal también se puede eliminar, aunque cada vez que esto ocurra se sobrescribirá su contenido.