Điều này là do bash xử lý chuyển hướng với >
lần đầu tiên, xóa nội dung của tệp. Sau đó, nó thực hiện lệnh. Nếu bạn sử dụng >>
, 50 dòng cuối cùng sẽ được thêm vào cuối của những gì hiện có trong tệp. Trong trường hợp này, bạn có cùng 50 dòng được lặp lại hai lần.
Lệnh hoạt động như mong đợi khi chuyển hướng đến một tệp khác. Đây là một cách để viết 50 dòng cuối cùng của tệp vào một tệp có cùng tên:
tail -50 /home/pi/Documents/test > /home/pi/Documents/test2 && mv /home/pi/Documents/test2 /home/pi/Documents/test
Điều này đầu tiên ghi 50 dòng cuối cùng vào một tệp tạm thời, sau đó được di chuyển bằng cách sử dụng mv
để thay thế tệp gốc.
Như đã lưu ý trong các bình luận, điều này sẽ không hoạt động nếu tệp vẫn mở. Di chuyển tệp cũng tạo ra một nút mới và có thể thay đổi quyền sở hữu và quyền. Một cách tốt hơn để làm điều này bằng cách sử dụng một tệp tạm thời sẽ là:
tail -50 /home/pi/Documents/test > /home/pi/Documents/test2 ; cat /home/pi/Documents/test2 > /home/pi/Documents/test
Tập tin tạm thời cũng có thể bị xóa, mặc dù mỗi lần điều này xảy ra, nội dung của nó sẽ bị ghi đè.