すでに 2 人がこの投稿を閉じる投票をしているので、質問をできるだけ明確にします。物理デバイス上のファイルは、バイナリ シーケンスとして表されます。そうは言っても、私が行う必要があるのは、そのようなレベルで 2 つのファイルの表現の違いをチェックし (つまり、2 つの異なるファイル間で同じ位置にある複数のバイトの違いを比較する必要があります)、そのような違いをスクリプトで出力することですbash
。
例:
file1: 00000000 01010101 10101010 11001100 00110011
file2: 00000000 01010101 01010101 00110011 00110011
スクリプトの出力は次のようになります:
differences: Byte 3 (file 1: 01010101; file2 10101010), Byte 4 (file1: 11001100; file 2: 00110011)
あるいはこれに似たもの。
そのため、これを実現するために最初に必要なのは、少なくとも特定の位置でファイルを開き、1バイトを読み取り、そのバイトを出力/保存できるようにすることです。そのためC
のプログラムを書くこともできますが、これを内部で行う方法はありますか?bash
?
答え1
試すことができますcmp
。2 つのファイルをバイトごとに比較します。
からman cmp
:
cmp - compare two files byte by byte
ただし、2 つのファイルの行数は等しくなければなりません。また、cmp
最初の違いのみがポイントされますが、次の違いを指すには、先頭から特定のバイトをスキップできることに注意してください。
$ cat foo
this is
a test
$ cat bar
this
is a test
$ cmp foo bar
foo bar differ: byte 5, line 1
$ cmp -b foo bar
foo bar differ: byte 5, line 1 is 40 12 ^J
異なるバイト値を印刷するにはcmp -l
、 を使用しますman cmp
:
-l, --verbose
output byte numbers and differing byte values
答え2
以下を試すことができますvimdiff
:
vimdiff -b file1 file2