Esiste bdiff (1) in Linux?


9

Vi è un bdiff(1)comando in Solaris, che consente di diff(1)file con dimensioni maggiori di quelle RAM ( http://docs.oracle.com/cd/E19683-01/806-7612/files-23/index.html ).

C'è qualcosa del genere in Linux? Ho provato a cercare su Google, ma non trovo quale pacchetto abbia bdiffin Ubuntu.



Risposte:


13

bdiff sembra essere disponibile su Linux (almeno come parte di Heirloom Toolchest ).

diff

Probabilmente userei semplicemente il vecchio diff diffuso con questo interruttore comunque:

diff --speed-large-files bigfileA bigfileB

Perché non funziona?

Vedi il commento di @EvanTeitelman, --speed-large-filesnon influenza il modo in cui i file vengono caricati in memoria.

Può essere dimostrato / confermato di non funzionare utilizzando il seguente comando:

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

bsdiff

Difficile da confermare, ma ho trovato uno strumento chiamato da bsdiffcui deriva bdiff. Ho confermato che questo strumento è in Ubuntu, semplicemente apt-get install bsdiff.

Perché potrebbe funzionare?

Ancora una volta grazie a @EvanTeitelman nei commenti, quanto bsdiffsopra è uno strumento diff per i file binari. bsdiffè uno strumento diff binario e può gestire file di grandi dimensioni. Non è chiaro quanto sia grande. Vedi i seguenti collegamenti a una discussione che ne discute l'uso.

rdiff

Penso che potresti anche usare rdiff per fare questo. Rdiff è in grado di gestire file di dimensioni molto grandi.

  1. Crea una firma di un file:

    rdiff signature A sigs.txt
    
  2. Utilizzare il file di firma generato sigs.txt e l'altro grande file B per creare il delta:

    rdiff delta sigs.txt B deltaAB.txt
    
  3. Delta contiene tutte le informazioni necessarie per ricreare il file B quando hai solo A e il file delta deltaAB.txt.

    Per ricreare B, esegui:

    rdiff patch A deltaAB.txt B
    

Perché funziona

Ho trovato questo post del blog intitolato: Un diff migliore o Cosa fare quando GNU diff esaurisce la memoria ("diff: memory esaurito") , che riporta che un rdiff di file da 4,5 GB consumava solo ~ 66 MB di RAM.

lfhex

lfhex è un'applicazione per visualizzare e modificare file in testo esadecimale, ottale, binario o ascii. Il principale punto di forza di lfhex è la capacità di lavorare con file molto più grandi della memoria di sistema. È comunque uno strumento GUI.

immagine dello schermo

                  ss of lfhex]! [ss of lfhex

Riferimenti


Anche se questo non è sempre documentato, GNU diff ti consente di utilizzare -Hcome sinonimo di --speed-large-files.

2
bsdiffè uno strumento diff binario, non uno strumento diff file di grandi dimensioni.

3
Sfortunatamente, sembra che il --speed-large-filesflag non influenzi il modo in cui GNU diff carica i file in memoria. Prova a correre fallocate -l 10G testa; fallocate -l 10G testb && diff --speed-large-files -a testa testbper confermare questo. (O dai un'occhiata al codice sorgente.)

2
Sono riuscito a bdiffcompilare da Heirloom Toolchest dopo averlo sostituito /sbin/shda /bin/shnei makefile. Ora quando provo a eseguirlo sul posto, ottengo bdiff: Can not execute '/usr/5bin/diff'. Spiacenti, non desidero installare nulla /usr/5bin/. Questa non è una soluzione praticabile. Le altre opzioni menzionate qui non funzionano per me perché voglio osservare le differenze come testo.
Christian Pietsch,

1
PS: Sorprendentemente, lfhex -c file1 file2funziona bene per me dopo aver impostato Visualizza -> Modifica base -> ASCII per entrambi i riquadri.
Christian Pietsch,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.