Linuxにはbdiff(1)はありますか?


9

bdiff(1)Solarisにdiff(1)は、RAMサイズよりも大きいサイズのファイルを許可するコマンドがあります(http://docs.oracle.com/cd/E19683-01/806-7612/files-23/index.html)。

Linuxにそのようなものはありますか?私はグーグルで試しましたがbdiff、Ubuntuにどのパッケージがあるかわかりません。



回答:


13

bdiffはLinux で利用できるようです(少なくともHeirloom Toolchestの一部として)。

差分

私はおそらくこのスイッチで通常の古い差分を使用するでしょう:

diff --speed-large-files bigfileA bigfileB

なぜ動作しないのですか?

@EvanTeitelmanによるコメントを参照してください--speed-large-files。ファイルがメモリにロードされる方法には影響しません。

次のコマンドを使用して、動作しないことを実証/確認できます。

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

bsdiff

これを確認するのは難しいですが、bsdiffから派生するというツールを見つけましたbdiff。このツールがUbuntuにあることを確認しましたapt-get install bsdiff

なぜうまくいくのでしょうか?

コメントで@EvanTeitelmanに感謝しbsdiffます。上記はバイナリファイルの差分ツールです。bsdiffバイナリdiffツールであり、大きなファイルを処理できます。どれだけ大きいかは不明です。使用方法については、次のスレッドへのリンクを参照してください。

rdiff

rdiffを使用してこれを行うこともできると思います。Rdiffは非常に大きなファイルを処理できます。

  1. 1つのファイルの署名を作成します。

    rdiff signature A sigs.txt
    
  2. 生成された署名ファイルsigs.txtと他の大きなファイルBを使用して、デルタを作成します。

    rdiff delta sigs.txt B deltaAB.txt
    
  3. デルタには、AとデルタファイルdeltaAB.txtしかない場合にファイルBを再作成するために必要なすべての情報が含まれています。

    Bを再作成するには、次のコマンドを実行します。

    rdiff patch A deltaAB.txt B
    

なぜそれが機能するのですか?

次のタイトルのブログ投稿を見つけました:より良いdiffまたはGNU diffがメモリを使い果たしたときの対処方法( "diff:メモリが使い尽くされました")、4.5GBのファイルのrdiffは〜66MBのRAMしか消費しなかったと報告しています。

lfhex

lfhexは、16進数、8進数、バイナリ、またはASCIIテキストでファイルを表示および編集するためのアプリケーションです。lfhexの主な長所は、システムメモリよりもはるかに大きいファイルを操作できることです。ただし、GUIツールです。

スクリーンショット

                  ss of lfhex]![ss of lfhex

参考文献


これは常に文書化されているわけではありませんが、GNU diffでは-Hの同義語として使用できます--speed-large-files

2
bsdiff大きなファイルの差分ツールではなく、バイナリの差分ツールです。

3
残念ながら、この--speed-large-filesフラグはGNU diffがファイルをメモリにロードする方法に影響を与えないようです。fallocate -l 10G testa; fallocate -l 10G testb && diff --speed-large-files -a testa testbこれを確認するために実行してみてください。(またはソースコードを見てください。)

2
Makefileでbdiff置き換え/sbin/shた後、Heirloom Toolchest からビルドでき/bin/shました。これを適切に実行しようとすると、が表示されますbdiff: Can not execute '/usr/5bin/diff'。申し訳ありませんが、には何もインストールしません/usr/5bin/。これは実行可能なソリューションではありません。ここで説明した他のオプションは、違いをテキストとして目立たせたいので機能しません。
クリスチャンピエッシュ2015

1
PS:驚いたことに、lfhex -c file1 file2両方のペインで[表示]-> [ベースの編集]-> [ASCII]を設定すると、うまく機能します。
クリスチャンピエッシュ2015
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.