Dies liegt daran, dass bash die Umleitung mit der >
ersten verarbeitet und den Inhalt der Datei löscht. Dann führt es den Befehl aus. Wenn Sie verwenden >>
, werden die letzten 50 Zeilen an das Ende des aktuellen Inhalts der Datei angehängt. In diesem Fall müssten Sie die gleichen 50 Zeilen zweimal wiederholen.
Der Befehl funktioniert beim Umleiten in eine andere Datei wie erwartet. Hier ist eine Möglichkeit, die letzten 50 Zeilen einer Datei in eine Datei mit demselben Namen zu schreiben:
tail -50 /home/pi/Documents/test > /home/pi/Documents/test2 && mv /home/pi/Documents/test2 /home/pi/Documents/test
Dabei werden zuerst die letzten 50 Zeilen in eine temporäre Datei geschrieben, die dann mit verschoben wird mv
, um die ursprüngliche Datei zu ersetzen.
Wie in den Kommentaren erwähnt, funktioniert dies nicht, wenn die Datei noch geöffnet ist. Durch das Verschieben der Datei wird auch ein neuer Inode erstellt, und möglicherweise werden Eigentümer und Berechtigungen geändert. Ein besserer Weg, dies mit einer temporären Datei zu tun, wäre:
tail -50 /home/pi/Documents/test > /home/pi/Documents/test2 ; cat /home/pi/Documents/test2 > /home/pi/Documents/test
Die temporäre Datei kann auch entfernt werden, wobei der Inhalt jedes Mal überschrieben wird.