Sometimes you want to know if some files are different. Sometimes you want to how they’re different. Sometimes you might want to compare files that are compressed and sometimes you might want to compare executables. And, regardless of what you want to compare, you probably want to select the most convenient way to see those differences. The good news is that you have a lot more options than you probably imagine when you need to focus on file differences.
The command most likely to come to mind for this task is diff. The diff command will show you the differences between two text files or tell you if two binaries are different, but it also has quite a few very useful options.
For text files, the diff command by default uses a format that shows the differences using < and > characters to represent the first and second of the two files and designations like 1c1 or 8d7 to report these differences in a format that could be used by the patch command.
$ diff file1 file2 1c1 < 0 top of file one --- > 0 top of file 2 3c3 < 2 --- > 2 two tomatoes 6c6 < 5 five bananas --- > 5 8d7 < 7 the end
If you just happen to have the patch command on your system, you can compare the two files, save the diff output to a file, and then use that file to force the second file to be the same as the first. The only time you’d likely want to do something like this is if you were trying to update files on a number of systems (rather than simply replace them) as the differences might be very small. You could do it like this:
Create the differences file:
$ diff file1 file2 > diffs
Use the differences file to make the seocnd file just like the first:
$ patch -i diffs file2
At this point, you’d have two identical files. Your file2 would be just like your file1. You could then use the diffs file on any number of systems to update the targeted file.
For most of us, this use of diff is probably not something we’d do very often.
If you only want to know if the files are different, you can try a simpler approach.
$ diff -q file1 file2 Files file1 and file2 differ
Second: side-by-side diff
If you want to see the differences between two files, but not the instructions that patch could use, you might like diff‘s side-by-side view. Note that lines with differences include a |.
$ diff -y file1 file2 0 top of file one | 0 top of file 2 1 one 1 one 2 | 2 two tomatoes 3 three 3 three 4 4 5 five bananas | 5 6 6 7 the end <
Some of the most useful diff options are these:
-b ignore white space differences -B ignore blank lines -w ignore all white space -i ignore case differences -y side-by-side
Third: top and bottom diff
The output from the diff command with the -c option displays the files sequentially with the…