10

I'd like to compare directories with binary files. Actually, I'm not interested in what the actual differences between files are, but to know if there's a differ (and what files differ). Previously I used meld, but it's cannot compare binary files.

What such file comparison tool can do this?

NOTE: It doesn't matter if it's a graphical tool or is just has a command-line.

2
  • 1
    Does the tool need to be graphical like meld or will things like diff and comm do?
    – terdon
    Commented Nov 18, 2014 at 11:55
  • @terdon - It doesn't matter. Thank you. I expanded the question.
    – Loom
    Commented Nov 18, 2014 at 12:04

3 Answers 3

16

This can easily be done with diff. For example:

$ ls -l foo/
total 2132
-rwxr-xr-x 1 terdon terdon 1029624 Nov 18 13:13 bash
-rwxr-xr-x 1 terdon terdon 1029624 Nov 18 13:13 bash2
-rwxr-xr-x 1 terdon terdon  118280 Nov 18 13:13 ls

$ ls -l bar/
total 1124
-rwxr-xr-x 1 terdon terdon 1029624 Nov 18 13:14 bash
-rwxr-xr-x 1 terdon terdon  118280 Nov 18 13:14 ls

$ diff bar/ foo/
Only in foo/: bash2

In the example above, the foo/ and bar/ directories contain binary files and bash2 is only in foo/.

So, you could run something simple like:

$ diff bar/ foo/ && echo "The directories' contents are identical"

That will show you the different files, if any, or print "The directories' contents are identical" if they are. To compare subdirectories and any files they may contain as well, use diff -r. Combine it with -q to suppress the output for text files.

4
  • 7
    You can recursively compare with diff too using the -r switch.
    – slm
    Commented Nov 18, 2014 at 12:19
  • 5
    and -q to disable actual diff output for text files.
    – rush
    Commented Nov 18, 2014 at 13:16
  • Presumably this will perform a binary comparison of foo/bash and bar/bash? Commented May 17, 2021 at 13:33
  • If you use the -r flag (see last paragraph) yes. If not, it will just compare file names.
    – terdon
    Commented May 17, 2021 at 14:15
1

You can compare two files using cmp command

usage:

cmp file1 file2

It will give the number bytes difference and line number

1
  • 3
    cmp can't do recursive comparison. The OP wants to compare directories, not files. Commented Jun 14, 2017 at 13:41
1

A complete comparison, showing identical, different and only in one or the other folder or subfolders:

diff -rqs bar/ foo/

(You'll get some output for each file, no need for the 'directories identical')

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .