Có bdiff (1) trong Linux không?


9

bdiff(1)lệnh trong Solaris, cho phép bạn tạo diff(1)các tệp có kích thước lớn hơn kích thước RAM của bạn ( http://docs.oracle.com/cd/E19683-01/806-7612/files-23/index.html ).

Có một cái gì đó như thế trong Linux? Tôi đã thử googling nhưng tôi không tìm thấy gói nào có bdifftrong Ubuntu.



Câu trả lời:


13

bdiff dường như có sẵn trên Linux (ít nhất là một phần của Công cụ gia truyền ).

khác

Tôi có lẽ sẽ chỉ sử dụng khác thường cũ với chuyển đổi này tuy nhiên:

diff --speed-large-files bigfileA bigfileB

Tại sao nó không hoạt động?

Xem bình luận của @EvanTeitelman, --speed-large-fileskhông ảnh hưởng đến cách các tệp được tải vào bộ nhớ.

Có thể được chứng minh / xác nhận không hoạt động bằng lệnh sau:

fallocate -l 10G testa; fallocate -l 10G testb && \
        diff --speed-large-files -a testa testb

bsdiff

Khó để xác nhận điều này nhưng tôi đã tìm thấy một công cụ có tên bsdiffbắt nguồn từ đó bdiff. Tôi đã xác nhận rằng công cụ này có trong Ubuntu, đơn giản apt-get install bsdiff.

Tại sao nó có thể làm việc?

Một lần nữa cảm ơn @EvanTeitelman trong các bình luận, bsdiffở trên là một công cụ khác cho các tệp nhị phân. bsdifflà một công cụ khác biệt nhị phân và có thể xử lý các tệp lớn. Không rõ là nó lớn đến mức nào. Xem các liên kết sau đây đến một chủ đề thảo luận về việc sử dụng nó.

thứ ba

Tôi nghĩ rằng bạn cũng có thể sử dụng ndiff để làm điều này là tốt. Rdiff có thể xử lý các tệp rất lớn.

  1. Tạo chữ ký của một tệp:

    rdiff signature A sigs.txt
    
  2. Sử dụng tệp chữ ký được tạo sigs.txt và tệp B lớn khác để tạo delta:

    rdiff delta sigs.txt B deltaAB.txt
    
  3. Delta chứa tất cả thông tin bạn cần để tạo lại tệp B khi bạn chỉ có A và tệp deltaAB.txt.

    Để tạo lại B, hãy chạy:

    rdiff patch A deltaAB.txt B
    

Tại sao nó hoạt động?

Tôi tìm thấy bài đăng trên blog này có tiêu đề: Khác biệt tốt hơn hoặc phải làm gì khi GNU diff hết bộ nhớ ("diff: bộ nhớ cạn kiệt") , báo cáo rằng một tệp 4,5 GB chỉ tiêu thụ ~ 66 MB RAM.

lfhex

lfhex là một ứng dụng để xem và chỉnh sửa các tệp trong văn bản hex, bát phân, nhị phân hoặc ascii. Sức mạnh chính của lfhex là khả năng làm việc với các tệp lớn hơn nhiều so với bộ nhớ hệ thống. Tuy nhiên, đây là một công cụ GUI.

ảnh chụp màn hình

                  ss của lfhex]! [ss của lfhex

Người giới thiệu


Mặc dù điều này không phải lúc nào cũng được ghi lại, GNU diff cho phép bạn sử dụng -Hnhư một từ đồng nghĩa với --speed-large-files.

2
bsdifflà một công cụ khác biệt nhị phân, không phải là một công cụ khác biệt tệp lớn.

3
Thật không may, có vẻ như --speed-large-filescờ không ảnh hưởng đến cách thức GNU diff tải các tệp vào bộ nhớ. Hãy thử chạy fallocate -l 10G testa; fallocate -l 10G testb && diff --speed-large-files -a testa testbđể xác nhận điều này. (Hoặc xem mã nguồn.)

2
Tôi đã quản lý để xây dựng bdifftừ Công cụ gia truyền sau khi thay thế /sbin/shbằng các tệp tạo tệp /bin/sh. Bây giờ khi tôi cố gắng thực hiện nó tại chỗ, tôi nhận được bdiff: Can not execute '/usr/5bin/diff'. Xin lỗi, tôi không muốn cài đặt bất cứ thứ gì /usr/5bin/. Đây không phải là một giải pháp khả thi. Các tùy chọn khác được đề cập ở đây không phù hợp với tôi vì tôi muốn đánh dấu sự khác biệt dưới dạng văn bản.
Christian Pietsch

1
PS: Đáng ngạc nhiên, lfhex -c file1 file2hoạt động tốt với tôi sau khi đặt Chế độ xem -> Chỉnh sửa cơ sở -> ASCII cho cả hai bảng.
Christian Pietsch
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.