Hãy tưởng tượng một tập tin được tạo bằng:
truncate -s1T file
echo test >> file
truncate -s2T file
Bây giờ tôi có một tệp 2 tebibyte (chiếm 4kiB trên đĩa), với "test\n"
chữ viết ở giữa.
Làm thế nào tôi có thể phục hồi "test"
hiệu quả, đó là mà không cần phải đọc toàn bộ tập tin.
tr -d '\0' < file
Sẽ cho tôi kết quả nhưng sẽ mất nhiều giờ.
Những gì tôi muốn là một cái gì đó chỉ xuất ra các phần không thưa thớt của tệp (vì vậy, trên hết "test\n"
hoặc nhiều khả năng, khối 4kiB được phân bổ trên đĩa lưu trữ dữ liệu đó).
Có các API để tìm ra phần nào của tệp được phân bổ (FIBMAP, FIEMAP, SEEK_HOLE, SEEK_DATA ...), nhưng công cụ nào phơi bày những phần đó?
Một giải pháp di động (ít nhất là cho các HĐH hỗ trợ các API đó) sẽ được đánh giá cao.
tr
vì nó vẫn đọc toàn bộ tệp và không chỉ xóa các byte NUL.
strings
?