Một vấn đề mà tôi đang làm gần đây khiến tôi ước rằng mình có thể lop ra phía trước tập tin. Giống như một "truncate ở phía trước," nếu bạn muốn. Cắt bớt một tập tin ở phía sau là một hoạt động phổ biến - một cái gì đó chúng ta làm mà không cần suy nghĩ nhiều về nó. Nhưng lopping ra phía trước của một tập tin? Nghe có vẻ vô lý lúc đầu, nhưng chỉ vì chúng tôi đã được đào tạo để nghĩ rằng điều đó là không thể. Nhưng một hoạt động lop có thể hữu ích trong một số trường hợp.Cắt ngắn tập tin ở mặt trước
Một ví dụ đơn giản (chắc chắn không phải là ví dụ duy nhất hoặc nhất thiết là ví dụ tốt nhất) là hàng đợi FIFO. Bạn đang thêm các mục mới vào cuối tệp và kéo các mục ra khỏi tệp từ phía trước. Tệp phát triển theo thời gian và có một không gian trống lớn ở phía trước. Với hệ thống tập tin hiện nay, có một số cách giải quyết vấn đề này:
- Như từng hạng mục được lấy ra, sao chép mục còn lại lên để thay thế nó, và cắt file. Mặc dù nó hoạt động, giải pháp này rất tốn kém theo thời gian.
- Theo dõi kích thước của không gian trống tại mặt trước và khi đạt đến kích thước hoặc tỷ lệ riêng của toàn bộ kích thước tệp, di chuyển mọi thứ lên và cắt bớt tệp. Điều này là nhiều hiệu quả hơn so với giải pháp trước đó, nhưng vẫn còn chi phí thời gian khi mục được di chuyển trong tệp.
- Thực hiện hàng đợi hình tròn trong tệp , thêm các mục mới vào lỗ ở mặt trước của tệp là các mục được loại bỏ. Điều này có thể khá hiệu quả, đặc biệt là nếu bạn không quan tâm đến việc khả năng xảy ra sự cố khi thoát khỏi số trong hàng đợi. Nếu bạn quan tâm về đơn đặt hàng, có khả năng phải di chuyển các mục xung quanh. Nhưng trong chung, hàng đợi hình tròn là khá dễ thực hiện và quản lý không gian đĩa tốt.
Nhưng nếu có thao tác lop, việc xóa một mục khỏi hàng đợi sẽ dễ dàng như việc cập nhật điểm đánh dấu đầu tệp. Thật dễ dàng, trên thực tế, như cắt ngắn một tập tin. Tại sao, sau đó, không có hoạt động như vậy?
Tôi hiểu một chút về việc triển khai hệ thống tệp và không thấy bất kỳ lý do cụ thể nào điều này sẽ khó. Dường như với tôi như tất cả nó sẽ yêu cầu là một từ (dword, có lẽ?) Cho mỗi mục phân bổ để nói nơi tập tin bắt đầu trong khối. Với 1 terabyte ổ đĩa dưới $ 100 Mỹ, nó có vẻ như một mức giá khá nhỏ để trả tiền cho các chức năng như vậy.
Nhiệm vụ nào khác sẽ được thực hiện dễ dàng hơn nếu bạn có thể lop ra khỏi mặt trước của một tệp hiệu quả như bạn có thể cắt ngắn ở cuối?
Bạn có thể nghĩ ra bất kỳ lý do kỹ thuật nào mà chức năng này không thể được thêm vào hệ thống tệp hiện đại không? Các lý do khác, phi kỹ thuật?
Một lợi thế lớn của một hoạt động như vậy là nó sẽ tránh chu kỳ xóa trên phương tiện truyền thông flash. – Michael
Trong thời gian chờ đợi, chủ đề này đã là một lỗi trong trang "man truncate". Tôi chắc chắn một ngày nào đó nó sẽ được thực hiện, 20 năm sau khi tôi lần đầu tiên yêu cầu nó – Lothar
cùng một vấn đề như: http://stackoverflow.com/questions/339483/how-can-i-remove-the-first-line- of-a-text-file-using-bash-sed-script mặc dù rõ ràng hơn ở đây –